yrc 95K release with patch pile

Filed under: JWRD, Networks, News, Software, yrc — Jacob Welsh @ 20:58

It is my distinct pleasure today to publish yrc version 95 Kelvin, the third public (and sixth absolute) release(i) of JWRD's own simple yet increasingly usable IRC chat client for the Unix terminal environment.

The general theme is automation, of the boring and sensible sort: harnessing the brute speed and precision of the machine to reduce the need for repetitive manual tasks.(ii) As such, its headline features are as follows:

  • Recall of previous lines from input history. This is a lifesaver in multiple error situations such as getting a command slightly wrong, sending a message when the network connection is interrupted, or inadvertently sending a message to a network status window which otherwise wouldn't even log it except to note the error.
  • Word completion using Tab, drawing its options from the set of nicknames in current channel, joined channel names in current network, and yrc internal commands ("slash commands").
  • Word-level cursor motion keys (back-word and forward-word).
  • Bulk deletion ("kill") keys, both word-level and line-level, with a history of recent kills which serves for internal cut-and-paste functionality or simply for undoing an accidental kill.
  • The /close-net command to disconnect from the current network if necessary and close out all its associated windows.
  • The /reconnect command to force reconnection, as if by ping timeout, without losing runtime state such as modified nickname as happens with a /disconnect.

Its software requirements are unchanged: Python 2.6 or 2.7. In particular, no third-party "readline" library sneaks in to support the refined editing and history features; nonetheless the codebase size remains quite manageable at around 2750 total lines of Python, up a mere 350 from the last release.

This has been two and a half years in coming, a cold winter (perhaps befitting the state of the world altogether) which saw the program lose at least one useful user, the end of Freenode, minimal progress on vetting server software for self-hosting, and the continued decline in relevance of IRC as a whole.(iii) Nonetheless, we still use yrc on a daily basis here and it's featured in some variants of our technical training curriculum, so we owe it to ourselves and our clients at the very least to keep it moving along; besides, having known-good, comprehensible and comprehended code on hand to reference or build on in future projects couldn't possibly hurt.

The heavy coding itself took only about five working days, with further time going to testing, documentation, release engineering, structuring of the changes - originally done as fine-grained git commits - into a series of relatively coherent V patches for ease of reading, followed by signing and testing the patches and of course this writeup.


This will be a dual-format release, including both the patches to support reading and further development as well as an archive for easy installation without demanding V tooling. Starting with that "easy" path:

yrc-95.tar.gz (38 kB), GPG signature.

Verify the signature, extract the tarball, enter the resulting "yrc-95" directory then view the README.txt file for the remaining installation instructions.

And for the expanded patch format:(iv)

Patch Seals Tree
yrc_minor_refactors_reorders.vpatch jfw Browse
yrc_minor_command_reorder.vpatch jfw Browse
yrc_input_history.vpatch jfw Browse
yrc_kill_yank.vpatch jfw Browse
yrc_prompt_redraw_optimization.vpatch jfw Browse
yrc_minor_command_reorder_2.vpatch jfw Browse
yrc_word_level_commands.vpatch jfw Browse
yrc_reindent_docs.vpatch jfw Browse
yrc_minor_char_refactors.vpatch jfw Browse
yrc_completion.vpatch jfw Browse
yrc_net_level_commands.vpatch jfw Browse
yrc_connect_join_streamlining.vpatch jfw Browse
yrc_95K_rc1.vpatch jfw Browse
yrc_distutils_install_workaround.vpatch jfw Browse
yrc_input_fixes.vpatch jfw Browse


There were some further user-facing changes that came up, for instance to fit better with the new features, for general consistency, or to make room for future work. Here for your convenience is a reprint of the full summary from the NEWS file, excluding those new features already mentioned.

Command changes:

  • /connect and /join now send focus to the target window (creating it as necessary).
  • /join, /part and /disconnect no longer log the action to the server messages window, since their network-acknowledged effects are visible anyway in the appropriate places.
  • /quit no longer takes a quit message, because it didn't work, and can't be made to work reliably without blocking client shutdown to wait for acknowledgement.
  • /close now takes a part message, since it implies /part when used on a channel.
  • /disconnect no longer takes a network name, always acting on the current window's network; this clears the way to letting it take a quit message instead at some point.
  • Keyboard commands not intended as slash commands (eg cursor movement and scrolling) can no longer be sent by name from the prompt. (Conceptually, the two command types are now clearly distinguished by considering the leading slash as part of the name.)

Protocol changes:

  • /nick now works also when unregistered, for servers seen in practice, by sending a fresh USER command along with the NICK. This helps when a nick is rejected on connect, such as when it's already in use.
  • Reconnection becomes somewhat more aggressive as the initial delay drops from 4 seconds to 1, making for a more responsive /reconnect. (Singular vs. plural complications in the delay info message are avoided by abbreviating the "seconds" unit.)

Deprecated features:

  • Command abbreviation (eg /c for /connect): please speak up now if you still find this beneficial even with tab completion.


  • Switch to tab-based indent for manual.txt too.


  • Assorted refactoring, reordering and optimization.

The new key commands can be found in section 3.2.3 of the updated manual.txt (Keyboard commands - At the prompt).

  1. Kelvin versioning counts downward, in something like an asymptotic process toward zero, by which point the product would be considered quite well frozen by any standard. Thus 96K was the previous release, from a start at 100K. [^]
  2. This sits in contrast, for instance, to the trendy, "AI" sort of automation where one invites the machine to speak for oneself:

    dorion: on the topic of identifying bots in the wild, in one of the local swamps someone was pushing btc over lightning. I linked my sign of intelligence article. a friend in that room replied with a 10 point summary of the article. it was ok, but a little awkward. I later found out he had pasted the 'chatgpt' output of : summarize this article in 10 points.
    diana_coman: lolz, quite
    dorion: though awkward, I didn't suspect it was bot output since it was coming from a known entity.
    dorion: it made sense after he told me, but still caught me offguard.
    diana_coman: the saddest part being that on one hand that's what passes then as "normal" as in expected, an awkward summary being acceptable, and on the other hand that people consider that quite genuinely as "their contribution" and value added/effort offered as such
    diana_coman: if you pointed out the awkwardness of it or otherwise "rejected" it even in the nicest of terms, the very likely reaction/impression across the board would be that you are "unfriendly" at best
    diana_coman: not that there is a disservice really for everyone involved to provide automated summaries
    diana_coman: but at the end of the day, the environment is what it is and other than carving, maintaining and if need be protecting even a space for better interactions and habits, I don't see what else can one really do


  3. Both as an ongoing trend, and in the envisioned future with new possibilities emerging in the nascent Eulora2 environment. [^]
  4. Speaking of automation, it looks like I could use a proper script for generating these tables already, though the codeview backend part is scripted at least. While we're at it, the descriptions from each manifest entry might be worth better highlighting, since they reflect real work done on summarizing each patch yet remain somewhat buried as things stand. [^]


  1. Congrats on the useful update to yrc.

    the descriptions from each manifest entry might be worth better highlighting, since they reflect real work done on summarizing each patch yet remain somewhat buried as things stand.

    This is a good point and I think it's part and parcel of actually having more helpful ways to explore any VaMP forest, really. More generally, the idea currently waiting to get to the front of the work queue is to literally be able to explore interactively any set of patches, including expanding/contracting the amount of information shown for any given patch at any point. In this sort of approach, the very short description of the codebase state achieved through each patch (or the patch's filename as fallback if such description is not available) is the most basic information displayed but the corresponding manifest entry would naturally be the very next level so perhaps even worth showing as a hint/on hovering over the patch's name.

    Comment by Diana Coman — 2023-01-25 @ 09:56

  2. @Diana Coman: it's a good link to the patch- vs codebase-centric distinction. While I wasn't thinking of it at the time, the patch-centric listing format I used here (even if just by default as what the legacy patch format pushes) seems to fit, in the context of someone following along with the blog and wanting to read all the patches in sequence, and in that case the patch names seem the more meaningful primary identifier than something like "codebase #16".

    For a full patch explorer (or codebase explorer?) aiming to make all levels of information efficiently navigable, I could see it being the other way around.

    And yes, a tooltip / hover-hint came to mind as a place to put the descriptions, since it can fit a fair amount of text without expanding the otherwise compact listing. I don't really like though how those are a second-class sort of text which can't be selected or scrolled and disappear as soon as the mouse is bumped; so perhaps something like the MP-WP footnotes where they play more of a supporting or accelerating role to the "real" text which is still found in the normal document flow.

    Comment by Jacob Welsh — 2023-01-26 @ 22:20

  3. Using the footnotes seems to fit the bill perfectly in this context as they are exactly out of the way when not needed and showing up as tooltip/hoover-hint when wanted.

    In the code-centric view, the patches are the arcs not the nodes, so quite separate from patch names+manifest file altogether. Hence, the "codebase #16" is not used instead of a patch name but as a default for code states for which the user didn't bother to give a more meaningful name (where they did, such name is used instead). The reason why the patch name is not used for a node is simply that there can easily be cases where there are several incoming arcs to a state (meaning: different patches that result, with hard guarantees, in the exact same code base, basically merging previously different trees or branches).

    At any rate, my aim is to have the choice of views and the flexibility wrt granularity/level of detail as one explores a whole set of patches in a given context, not at all to mandate one view for all cases and in all possible contexts. And I certainly agree that in this case where there is just one clear sequence of patches following one another, the patch-centric view fits quite well. The two types of views simply meet perhaps on the need to bring in the corresponding entry from the manifest file and show it more prominently.

    Comment by Diana Coman — 2023-02-01 @ 19:31

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by MP-WP. Copyright Jacob Welsh.