<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: thaliaarchi</title><link>https://news.ycombinator.com/user?id=thaliaarchi</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 05 May 2026 08:37:42 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=thaliaarchi" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by thaliaarchi in "Unix V4 Tape from University of Utah"]]></title><description><![CDATA[
<p>readtape has now been updated for portability.</p>
]]></description><pubDate>Sat, 27 Dec 2025 09:32:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=46400487</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=46400487</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46400487</guid></item><item><title><![CDATA[New comment by thaliaarchi in "We'd be better off with 9-bit bytes"]]></title><description><![CDATA[
<p>Unix V1 also used 1/60 seconds</p>
]]></description><pubDate>Sun, 10 Aug 2025 10:28:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=44854205</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=44854205</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44854205</guid></item><item><title><![CDATA[New comment by thaliaarchi in "MicroPython v1.25.0"]]></title><description><![CDATA[
<p>I was talking about the performance, not the feature set. Russ Cox's re1 and the re1.5 fork have several engines for different implementation strategies. re1 was written for primarily pedagogical reasons, so its minimality comes from that.<p>The engine chosen by MicroPython is vulnerable to catastrophic backtracking and switching to the Pike VM implementation would fix that. Instead of backtracking in the text when the pattern doesn't match, the Pike VM iterates each char in the text only once, visiting the states valid for that position in lock step. Consequently, it allocates a list of “thread”s, proportional in length to the number of states in the pattern (though usually patterns have relatively few states). Many security issues have resulted from regexp denials of service, so this slight memory tradeoff might be worthwhile.<p>Since recursiveloop.c has been changed by MicroPython, those changes would need to be ported to pike.c. The fixes are small and none of the extra features exploit the backtracking, so this should be easy.</p>
]]></description><pubDate>Thu, 15 May 2025 07:23:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=43992638</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=43992638</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43992638</guid></item><item><title><![CDATA[New comment by thaliaarchi in "MicroPython v1.25.0"]]></title><description><![CDATA[
<p>I find it interesting that MicroPython's `re` module[0] is implemented with a backtracking regular expression engine from re1.5[1], instead of one of the linear-time engines from the same library. (Russ Cox covers the various engines in the excellent blog series[2] which re1 is a companion to.) I figure the choice was made due to binary size or memory constraints, though they're all quite small.<p>[0]: <a href="https://github.com/micropython/micropython/tree/master/lib/re1.5">https://github.com/micropython/micropython/tree/master/lib/r...</a><p>[1]: <a href="https://github.com/pfalcon/re1.5/tree/v0.8.2">https://github.com/pfalcon/re1.5/tree/v0.8.2</a><p>[2]: <a href="https://swtch.com/~rsc/regexp/regexp2.html" rel="nofollow">https://swtch.com/~rsc/regexp/regexp2.html</a></p>
]]></description><pubDate>Thu, 15 May 2025 04:58:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=43991982</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=43991982</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43991982</guid></item><item><title><![CDATA[New comment by thaliaarchi in "PiDP-1, or the rebirth of an old machine"]]></title><description><![CDATA[
<p>I just built my PiDP-11 and would love to get one of these.</p>
]]></description><pubDate>Mon, 07 Apr 2025 19:47:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=43615175</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=43615175</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43615175</guid></item><item><title><![CDATA[New comment by thaliaarchi in "Why America now eats a crazy number of avocados"]]></title><description><![CDATA[
<p><a href="https://www.npr.org/2015/09/18/441530790/how-the-desperate-norwegian-salmon-industry-created-a-sushi-staple" rel="nofollow">https://www.npr.org/2015/09/18/441530790/how-the-desperate-n...</a></p>
]]></description><pubDate>Tue, 01 Apr 2025 05:05:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=43543031</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=43543031</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43543031</guid></item><item><title><![CDATA[New comment by thaliaarchi in "Show HN: Chez Scheme txtar port from Go"]]></title><description><![CDATA[
<p>Simple format. Makes me want to write a parser for it using a shared buffered reader library I’m working on in Rust.</p>
]]></description><pubDate>Sat, 08 Feb 2025 19:11:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=42985366</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=42985366</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42985366</guid></item><item><title><![CDATA[New comment by thaliaarchi in "Advent of Code 2024"]]></title><description><![CDATA[
<p>I'm continuing my tradition of doing AoC in Whitespace[0]. The first year I did it, it was motivation to build out a standard library so things wouldn't be so tedious. Now, I find myself wishing I had finished better tooling. I debug with wsjq[1], a CLI debugger like gdb written in jq, but it's slow.<p>[0]: <a href="https://github.com/thaliaarchi/ws-challenges">https://github.com/thaliaarchi/ws-challenges</a><p>[1]: <a href="https://github.com/thaliaarchi/wsjq">https://github.com/thaliaarchi/wsjq</a></p>
]]></description><pubDate>Sun, 01 Dec 2024 13:23:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=42288330</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=42288330</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42288330</guid></item><item><title><![CDATA[New comment by thaliaarchi in "Why did Windows 95 setup use three operating systems?"]]></title><description><![CDATA[
<p>The current article[0] says:<p>> Excel 2.0 was released a month before Windows 2.0, and the installed base of Windows was so low at that point in 1987 that Microsoft had to bundle a runtime version of Windows 1.0 with Excel 2.0.<p>[0]: <a href="https://en.wikipedia.org/wiki/Microsoft_Excel" rel="nofollow">https://en.wikipedia.org/wiki/Microsoft_Excel</a></p>
]]></description><pubDate>Sun, 17 Nov 2024 23:56:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=42168439</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=42168439</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42168439</guid></item><item><title><![CDATA[New comment by thaliaarchi in "How to fork"]]></title><description><![CDATA[
<p>Or easier, do an interactive rebase and mark the last commit which is in the partial-rebase branch for editing. Then, do `git reset --hard partial-rebase` and continue the rebase.</p>
]]></description><pubDate>Tue, 15 Oct 2024 10:51:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=41847200</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=41847200</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41847200</guid></item><item><title><![CDATA[New comment by thaliaarchi in ""Bad Apple" in Minecraft"]]></title><description><![CDATA[
<p>That feeling seems common in hindsight. Everything seems easier, once all the problems have been solved. Related, I enjoy the author's sense of humor:<p>> I made a prototype and, lo and behold, it was in fact slow, as predicted. (I’m smart.)<p>And in another article[0], describing an inefficient collision algorithm:<p>> Mojang’s decision never crossed my mind. I guess I’m not a real programmer.<p>[0]: <a href="https://purplesyringa.moe/blog/ru/minecraft-compares-arrays-in-cubic-time/" rel="nofollow">https://purplesyringa.moe/blog/ru/minecraft-compares-arrays-...</a></p>
]]></description><pubDate>Sat, 12 Oct 2024 02:20:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=41815828</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=41815828</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41815828</guid></item><item><title><![CDATA[New comment by thaliaarchi in "A Collection of Free Public APIs That Is Tested Daily"]]></title><description><![CDATA[
<p>That explains why there’s so many Swiss APIs.</p>
]]></description><pubDate>Wed, 28 Aug 2024 14:26:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=41379895</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=41379895</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41379895</guid></item><item><title><![CDATA[New comment by thaliaarchi in "Back dating Git commits based on file modification dates"]]></title><description><![CDATA[
<p>I use the following to create a commit using the latest modification date of the staged files. If you put it in your PATH as git-tcommit, you can invoke it as `git tcommit`. If GIT_AUTHOR_DATE or GIT_COMMITTER_DATE is passed, it overrides the modified time, and it honors TZ. It works with GNU or BSD.<p><pre><code>    #!/usr/bin/env bash
    set -eEuo pipefail

    # `git commit`, using the latest file modification time as the commit and author
    # dates, when GIT_AUTHOR_DATE or GIT_COMMITTER_DATE, respectively, is not set.

    # Use fractional seconds when available to display the newest file more
    # accurately, even though Git only uses seconds.
    if which gstat >/dev/null; then
      stat=(gstat --format='%.Y %n') # Detected aliased GNU coreutils
    elif stat --version 2>/dev/null | grep -q 'GNU coreutils'; then
      stat=(stat --format='%.Y %n') # Detected GNU coreutils
    else
      stat=(stat -f '%m %N') # Fallback to BSD-style, which only reports seconds
    fi

    # Select the latest modified time of all staged files, excluding deletions.
    modified="$(
      cd "$(git rev-parse --show-toplevel)" &&
      git diff --staged --diff-filter=d --name-only -z |
        xargs -0 "${stat[@]}" |
        sort -rn |
        head -1
    )"

    modified_seconds=
    if [[ -n $modified ]]; then
      modified_seconds="${modified%% *}"
      modified_file="${modified#* }"
      modified_date="$(date -r "${modified_seconds%.*}" +'%Y-%m-%d %H:%M:%S %z')"
      echo "Modify date: $modified_date ($modified_file)"
    fi
    author_seconds="$modified_seconds"
    committer_seconds="$modified_seconds"
    if [[ -n ${GIT_AUTHOR_DATE+.} ]]; then
      echo "Author date: ${GIT_AUTHOR_DATE:-now}"
    fi
    if [[ -n ${GIT_COMMITTER_DATE+.} ]]; then
      echo "Commit date: ${GIT_COMMITTER_DATE:-now}"
    else
      last_commit_seconds="$(git show -s --format=%at HEAD 2>/dev/null || echo 0)"
      if [[ $modified_seconds < $last_commit_seconds ]]; then
        committer_seconds=
        echo "Commit date: now (last commit: $(git show -s --format=%ai HEAD 2>/dev/null))"
      fi
    fi

    GIT_AUTHOR_DATE="${GIT_AUTHOR_DATE-"$author_seconds"}" \
    GIT_COMMITTER_DATE="${GIT_COMMITTER_DATE-"$committer_seconds"}" \
    exec git commit "$@"</code></pre></p>
]]></description><pubDate>Sat, 03 Aug 2024 16:55:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=41147700</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=41147700</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41147700</guid></item><item><title><![CDATA[New comment by thaliaarchi in "The love letter generator created by Alan Turing and Christopher Strachey"]]></title><description><![CDATA[
<p>This was also a year before Mad Libs was invented in 1953, using the same template-filling style.</p>
]]></description><pubDate>Tue, 23 Jul 2024 03:22:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=41042220</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=41042220</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41042220</guid></item><item><title><![CDATA[New comment by thaliaarchi in "Building the Bell System"]]></title><description><![CDATA[
<p>> The resulting units may be called binary digits, or more shortly, bits.<p>It's interesting to read this early use of “bit”, before the term became commonplace. The first publication to use “bit”, also by Shannon, was only a year prior[0].<p>[0]: <a href="https://en.wikipedia.org/wiki/Bit#History" rel="nofollow">https://en.wikipedia.org/wiki/Bit#History</a></p>
]]></description><pubDate>Sun, 14 Jul 2024 21:24:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=40963294</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=40963294</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40963294</guid></item><item><title><![CDATA[New comment by thaliaarchi in "Go's History in Code (2020)"]]></title><description><![CDATA[
<p>Edited. Thanks</p>
]]></description><pubDate>Sun, 19 May 2024 21:56:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=40410047</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=40410047</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40410047</guid></item><item><title><![CDATA[Go's History in Code (2020)]]></title><description><![CDATA[
<p>Article URL: <a href="https://seh.dev/go-legacy/">https://seh.dev/go-legacy/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=40409997">https://news.ycombinator.com/item?id=40409997</a></p>
<p>Points: 3</p>
<p># Comments: 2</p>
]]></description><pubDate>Sun, 19 May 2024 21:46:53 +0000</pubDate><link>https://seh.dev/go-legacy/</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=40409997</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40409997</guid></item><item><title><![CDATA[New comment by thaliaarchi in "Translation of Rust's core and alloc crates to Coq for formal verification"]]></title><description><![CDATA[
<p>A compiler that injects backdoors in targeted programs and self-propagates the meta-backdoor (to avoid detection in the source) is exactly the trusting trust attack and it can be mitigated by diverse double-compiling (paper linked above). It requires a second compiler and we have mrustc, a Rust compiler in C++ built specifically for circumventing the unverified bootstrap chain of rustc.<p>The process is: Compile mrustc with a C++ compiler. Compile rustc sources with untrusted rustc binary and compile rustc sourcs with mrustc (these have identical behavior, but different codegen). Compile rustc sources with rustc-by-rustc and compile rustc sources with rustc-by-mrustc (these will have identical behavior and codegen). Those will match. If you compile once more, they will match. Since mrustc is never compiled by rustc, such a backdoor would have to also exist in gcc/clang and propagate with exactly identical behavior in mrustc. The process could be repeated for gcc/clang.</p>
]]></description><pubDate>Wed, 15 May 2024 20:02:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=40371662</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=40371662</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40371662</guid></item><item><title><![CDATA[New comment by thaliaarchi in "Translation of Rust's core and alloc crates to Coq for formal verification"]]></title><description><![CDATA[
<p>I didn't touch on that, but I did assume trust of the Rust toolchain, verifying starting at THIR. Verifying rustc would be a monumental undertaking, though I think some people are working on it.<p>Since we don't have a verified rustc (a la CompCert [0]), I wonder if an approach like the translation validation of seL4 [1] would work. They prove that the artifact (ARM machine code) produced by an existing compiler (gcc) for a chosen program (seL4) matches the source semantics (C). Thus you could circumvent trusting rustc, but it only works to verify a specific output of a chosen program. If the chosen program was coq-of-rust, I don't think this would be easier than the approach I detailed above. The seL4 kernel is 9,500 lines of C, while their Isabel/HOL specification is over 200,000 lines, so the technique doesn't seem to scale to a large chosen source like rustc.<p>Isn't bootstrapping fun?<p>[0]: Xavier Leroy. 2008. “Formal verification of a realistic compiler”. <a href="https://xavierleroy.org/publi/compcert-CACM.pdf" rel="nofollow">https://xavierleroy.org/publi/compcert-CACM.pdf</a><p>[1]: Thomas Sewell, Magnus Myreen, and Gerwin Klein. PLDI 2013. “Translation Validation for a Verified OS Kernel”. <a href="https://sci-hub.st/10.1145/2491956.2462183" rel="nofollow">https://sci-hub.st/10.1145/2491956.2462183</a></p>
]]></description><pubDate>Wed, 15 May 2024 08:38:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=40364516</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=40364516</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40364516</guid></item><item><title><![CDATA[New comment by thaliaarchi in "Translation of Rust's core and alloc crates to Coq for formal verification"]]></title><description><![CDATA[
<p>That's really impressive.<p>Automatic translation like this shifts the trust to the tool. coq-of-rust itself is written in Rust, not in Coq. The recursive nature is somewhat boggling, but I think a proof of its correctness is possible in a similar process to David A. Wheeler's “Countering Trusting Trust through Diverse Double-Compiling” (2009) [0] (which circumvents Ken Thompson's Trusting Trusting attack by using a second compiler), but with a mix of a CompCert approach.<p>To verify it, you'd use coq-of-rust to convert the coq-of-rust translator from Rust to Coq. That translation is not trusted, because it was performed in Rust, but it doesn't matter. Once in Coq, you prove the desired correctness properties—crucially, that it preserves the semantics of the Rust program when it translates a program to Coq.<p>As in the article, it is likely easier to work with more functional definitions in proofs instead of generated ones, so you'd undertake the same process as they do with the stdlib of proving equivalence between definitions. Since the current line count for the coq-of-rust translator (specifically, lib/ [1]) is 6350 lines of Rust, it even seems feasible to write a full translator in Coq and prove its equivalence to the generated one.<p>Then, you execute the proven-correct Coq coq-of-rust translator on the Rust source of the coq-of-rust translator. The Coq definitions it outputs should match the output of the Rust coq-of-rust translator that you started with.<p>As an aside, it's nice to see industry funding for work like this. I'm often cynical of cryptocurrency, but its correctness constraints really push for improvements in areas I like (Rust, Coq, funding for masters students I know, etc.).<p>[0]: <a href="https://dwheeler.com/trusting-trust/wheelerd-trust.pdf" rel="nofollow">https://dwheeler.com/trusting-trust/wheelerd-trust.pdf</a><p>[1]: <a href="https://github.com/formal-land/coq-of-rust/tree/main/lib">https://github.com/formal-land/coq-of-rust/tree/main/lib</a></p>
]]></description><pubDate>Wed, 15 May 2024 07:36:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=40364105</link><dc:creator>thaliaarchi</dc:creator><comments>https://news.ycombinator.com/item?id=40364105</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40364105</guid></item></channel></rss>