<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: tzot</title><link>https://news.ycombinator.com/user?id=tzot</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 09 Sep 2026 20:11:02 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=tzot" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by tzot in "Pantograph"]]></title><description><![CDATA[
<p>I remember SQLWindows of Gupta Technologies (later renamed to Team Developer of Centura Technologies IIRC) which had an outline IDE. Quoting from <a href="https://yagnipedia.com/wiki/sqlwindows" rel="nofollow">https://yagnipedia.com/wiki/sqlwindows</a> :<p>> SQLWindows had an outline-based code structure — not braces, not BEGIN/END, but an indented tree that was simultaneously the code and the IDE’s display. You wrote code by expanding and collapsing outline nodes. Classes were outline headings. Methods were sub-headings. Code lines were leaf nodes. The entire program was a hierarchical outline that the IDE rendered as a collapsible tree.</p>
]]></description><pubDate>Sun, 02 Aug 2026 10:21:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=49143022</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=49143022</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49143022</guid></item><item><title><![CDATA[New comment by tzot in "UEFA and its national associations will not participate in FIFA competitions"]]></title><description><![CDATA[
<p>And corporate UX/Design teams are eager to modernize those cards; yes they're already flat, but canary yellow is so last century and some glass effects or abolishing the rounded corners will be the next thing.</p>
]]></description><pubDate>Thu, 30 Jul 2026 23:21:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=49117091</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=49117091</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49117091</guid></item><item><title><![CDATA[New comment by tzot in "A shell colon does nothing. Use it anyway"]]></title><description><![CDATA[
<p>Do you have a real-world example where we would like to preserve `$?` after the `if` (which `if` specifically branches on the result code of the command it tests)? Where we want to use the actual return code that the `if` did not handle itself.<p>I am asking because I have never needed preserving the `$?` outside of an `if`, nor have I ever seen this in somebody else's scripts, and I'm curious.</p>
]]></description><pubDate>Sun, 26 Jul 2026 15:34:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=49059188</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=49059188</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49059188</guid></item><item><title><![CDATA[New comment by tzot in "A shell colon does nothing. Use it anyway"]]></title><description><![CDATA[
<p>I believe you missed a semicolon after `exit 1` and before `}`. `}` closes the opening `{` only at the start of a command (POSIX rules; don't remember now if bash recognizes it when it's just a command argument).</p>
]]></description><pubDate>Sun, 26 Jul 2026 10:07:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=49056476</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=49056476</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49056476</guid></item><item><title><![CDATA[New comment by tzot in "I Owe My Life to the Commodore 64"]]></title><description><![CDATA[
<p>Commodore 64 was quite popular in Europe too, but I believe more successful was the Sinclair Spectrum (and some copycats behind the iron curtain).
In my case, too, it was the Speccy and later the Sinclair QL, when it got really affordable; I owe my life to the QL :)</p>
]]></description><pubDate>Fri, 17 Jul 2026 11:11:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=48945879</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=48945879</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48945879</guid></item><item><title><![CDATA[New comment by tzot in "SQLite should have (Rust-style) editions"]]></title><description><![CDATA[
<p>Exactly. In cases where I expect long-running parallel connections from separate processes to the same sqlite file, I make sure that all read transactions do `BEGIN DEFERRED` so `COMMIT` releases the read locks, and all write transactions do `BEGIN IMMEDIATE` so that `SQLITE_BUSY` timeout is not side-stepped.<p>There was one case where all transactions were implemented using nested `SAVEPOINT bla` so `BEGIN IMMEDIATE` could not be used without more hassle, so this ended all “I know I'm going to write” transactions to instantly update a single-row table so that their lock would not begin as DEFERRED and eventually switch to `IMMEDIATE`; this way almost all `SQLITE_BUSY` side-steppings disappeared. (timeout was set to 30 seconds but all read/write transactions were instrumented to have less than 5 seconds duration).</p>
]]></description><pubDate>Thu, 16 Jul 2026 12:26:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=48933530</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=48933530</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48933530</guid></item><item><title><![CDATA[New comment by tzot in "SQLite should have (Rust-style) editions"]]></title><description><![CDATA[
<p>> I once had to clean up a project where some code had accidentally been writing the strings '1' and '0' to a column which was intended to store booleans (1 and 0). That was not a fun debugging story.<p>So this was a write to a column that did not have INTEGER affinity. If it was intended to be used as a boolean, then it should have INTEGER affinity. I know because I've tried hard to enter integer- and float-like strings as strings in INTEGER affinity columns, and I haven't managed to; I could only insert them as BLOBs, or prefix the string with say '\' and check/remove at the application level. (That was for an ontology-like database, where table EAttribute.eatvalue could have any type.)</p>
]]></description><pubDate>Thu, 16 Jul 2026 12:18:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=48933459</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=48933459</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48933459</guid></item><item><title><![CDATA[New comment by tzot in "TIL: You can make HTTP requests without curl using Bash /dev/TCP"]]></title><description><![CDATA[
<p>I would use HTTP/1.0 without a need for Connection: close. Unless 1.0 is not generally supported anymore, but this is not the case in my experience.</p>
]]></description><pubDate>Tue, 16 Jun 2026 21:40:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48562515</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=48562515</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48562515</guid></item><item><title><![CDATA[New comment by tzot in "Should you normalize RGB values by 255 or 256?"]]></title><description><![CDATA[
<p>The debate is if 2000 is the first year of the 21st century or the last year of the <i>20th</i> century. (btw I agree with the latter)</p>
]]></description><pubDate>Mon, 01 Jun 2026 23:29:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=48363939</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=48363939</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48363939</guid></item><item><title><![CDATA[New comment by tzot in "Making your own programming language is easier than you think (but also harder)"]]></title><description><![CDATA[
<p>You say all wrong and then go on about explaining I'm half wrong. I feel there's a pattern (or maybe another joke that whooshed over my head) here but it is obvious to me that I am not your intended stand-up comedy audience and I should ask for my money back. :)</p>
]]></description><pubDate>Mon, 11 May 2026 12:08:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=48093949</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=48093949</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48093949</guid></item><item><title><![CDATA[New comment by tzot in "Making your own programming language is easier than you think (but also harder)"]]></title><description><![CDATA[
<p>I see that and I raise Elastic Tabstops!<p><a href="https://nick-gravgaard.com/elastic-tabstops/" rel="nofollow">https://nick-gravgaard.com/elastic-tabstops/</a></p>
]]></description><pubDate>Sun, 10 May 2026 11:00:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=48082812</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=48082812</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48082812</guid></item><item><title><![CDATA[New comment by tzot in "Making your own programming language is easier than you think (but also harder)"]]></title><description><![CDATA[
<p>> > If I were to make my own programming language, it would look an awful lot like Python.<p>> I agree, Python allows anyone to write bad code, but makes up for it by running the code slow enough that it can't do real damage.<p>In the same sentence you agree with the implied beauty of the <i>syntax of Python</i> and then go on sarcastically about the <i>performance of CPython</i>. Assumably you deliberately mixed language and implementation because you needed a soapbox, so hey, here's my comment to which you can reply and continue your rhetoric.</p>
]]></description><pubDate>Sun, 10 May 2026 10:57:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=48082804</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=48082804</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48082804</guid></item><item><title><![CDATA[New comment by tzot in "Pomiferous: The most extensive apples (pommes) database"]]></title><description><![CDATA[
<p>I blame font keming for that.</p>
]]></description><pubDate>Mon, 04 May 2026 16:40:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=48011101</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=48011101</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48011101</guid></item><item><title><![CDATA[New comment by tzot in "Battle for Wesnoth: open-source, turn-based strategy game"]]></title><description><![CDATA[
<p>Oh, yeah! And I believe there are not many games which have Linux, Windows and MacOS versions allowing interplay. Several years ago we had one or two LAN parties with hardware running all three operating systems.</p>
]]></description><pubDate>Mon, 06 Apr 2026 21:29:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=47667402</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=47667402</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47667402</guid></item><item><title><![CDATA[New comment by tzot in "CodingFont: A game to help you pick a coding font"]]></title><description><![CDATA[
<p>I tried this variant of JetBrains Mono and it had the perfect glyph width (reportedly -6%) for my screen and window sizes: NRK Mono Condensed from <a href="https://github.com/N-R-K/NRK-Mono" rel="nofollow">https://github.com/N-R-K/NRK-Mono</a>. I also agree with almost all of the other modifications mentioned in the github page under “Some notable changes are:”<p>Now I can have side-by-side two editors plus a Structure or Project pane at the left in PyCharm while having 120 chars visible in both editors.</p>
]]></description><pubDate>Mon, 30 Mar 2026 22:41:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=47580623</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=47580623</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47580623</guid></item><item><title><![CDATA[New comment by tzot in "Everything old is new again: memory optimization"]]></title><description><![CDATA[
<p>Well, we can use memoryview for the dict generation avoiding creation of string objects until the time for the output:<p><pre><code>    import re, operator
    def count_words(filename):
        with open(filename, 'rb') as fp:
            data= memoryview(fp.read())
        word_counts= {}
        for match in re.finditer(br'\S+', data):
            word= data[match.start(): match.end()]
            try:
                word_counts[word]+= 1
            except KeyError:
                word_counts[word]= 1
        word_counts= sorted(word_counts.items(), key=operator.itemgetter(1), reverse=True)
        for word, count in word_counts:
            print(word.tobytes().decode(), count)
</code></pre>
We could also use `mmap.mmap`.</p>
]]></description><pubDate>Fri, 27 Mar 2026 10:31:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=47540955</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=47540955</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47540955</guid></item><item><title><![CDATA[New comment by tzot in "Shell Tricks That Make Life Easier (and Save Your Sanity)"]]></title><description><![CDATA[
<p>For the most simple case of a single job, I use the job number (`[1]` in the example) with %-notation for the background jobs in kill (which is typically a shell builtin):<p><pre><code>    $ cat
    ^Z[1] + Stopped                    cat
    $ kill %1</code></pre></p>
]]></description><pubDate>Thu, 26 Mar 2026 20:17:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=47535178</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=47535178</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47535178</guid></item><item><title><![CDATA[New comment by tzot in "Shell Tricks That Make Life Easier (and Save Your Sanity)"]]></title><description><![CDATA[
<p>On scripts that might handle filenames with spaces, I include:<p><pre><code>    IFS='   ''
    '
</code></pre>
Hint: the spaces between the first two apostrophes are actually one <Tab>.<p>This does not affect the already written script (you don't need to press Tab instead of space to separate commands and arguments in the script itself), but by making <Tab> and <LF> be the “internal field separators” will allow globbing with less quoting worries while still allowing for `files=$(ls)` constructs.<p>Example:<p><pre><code>    IFS='   ''
    '
    echo hello >/tmp/"some_unique_prefix in tmp"
    cat /tmp/some_unique_prefix*
    fn="My CV.txt"
    echo "I'm alive" >/tmp/$fn
    cat /tmp/$fn
</code></pre>
Of course this will still fail if there happens to be a filename with <Tab> in it.</p>
]]></description><pubDate>Thu, 26 Mar 2026 20:08:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47535065</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=47535065</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47535065</guid></item><item><title><![CDATA[New comment by tzot in "Shell Tricks That Make Life Easier (and Save Your Sanity)"]]></title><description><![CDATA[
<p>> # f2 is ^[OQ; to double check, run `xargs` and then press f2<p>I remember using `cat -v` before learning that `xargs` exists… or maybe before `xargs` <i>actually</i> existed on systems I used :)</p>
]]></description><pubDate>Thu, 26 Mar 2026 19:52:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=47534891</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=47534891</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47534891</guid></item><item><title><![CDATA[New comment by tzot in "SBCL: A Sanely-Bootstrappable Common Lisp (2008) [pdf]"]]></title><description><![CDATA[
<p>Maybe you understood image as in photo-image instead of image as in memory-image (like disk-image); a glorified memory dump, more-or-less.</p>
]]></description><pubDate>Thu, 12 Mar 2026 15:05:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=47351691</link><dc:creator>tzot</dc:creator><comments>https://news.ycombinator.com/item?id=47351691</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47351691</guid></item></channel></rss>