<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<?xml-stylesheet href="https://www.chiark.greenend.org.uk/~ryounger/assets/feed.xsl" type="text/xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Rust on Ross Younger</title>
    <link>https://www.chiark.greenend.org.uk/~ryounger/tags/rust/</link>
    <description>Recent content in Rust on Ross Younger</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-UK</language>
    <lastBuildDate>Tue, 14 Jul 2026 16:24:56 +1200</lastBuildDate><atom:link href="https://www.chiark.greenend.org.uk/~ryounger/tags/rust/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Lignum</title>
      <link>https://www.chiark.greenend.org.uk/~ryounger/2026/07/lignum/</link>
      <pubDate>Tue, 14 Jul 2026 16:24:56 +1200</pubDate>
      
      <guid>https://www.chiark.greenend.org.uk/~ryounger/2026/07/lignum/</guid>
      <description>&lt;p&gt;A source code repository visualiser with a 1,000&amp;rsquo; view.&lt;/p&gt;
&lt;p&gt;I wasn&amp;rsquo;t satisfied with the state of Git repository visualisers. I found they love to show you every last commit.
When your repo is more than trivial, this is not useful for getting the big-picture.&lt;/p&gt;
&lt;p&gt;Mine is different: it focusses on the macroscopic structure.
Which are the active branches, where are the tags, where are the divergence and merge points?&lt;/p&gt;
&lt;p&gt;In my first software job out of college &amp;ndash; back when dinosaurs roamed the earth and &lt;a href=&#34;https://en.wikipedia.org/wiki/Concurrent_Versions_System&#34;&gt;CVS&lt;/a&gt; was the height of version control &amp;ndash; we often ended up drawing what we termed railway diagrams on the whiteboard to visualise the structure. This is my attempt to automate creating these.&lt;/p&gt;
&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Output in GraphViz &lt;code&gt;dot&lt;/code&gt; format&lt;/li&gt;
&lt;li&gt;Revision of interest filtering, with wildcards&lt;/li&gt;
&lt;li&gt;Options to include all local branches (default), remotes, tags and root (parentless) commits&lt;/li&gt;
&lt;li&gt;Edges are annotated with their size in commits (broadly the number on the direct line from A to B, though merge commits give different results)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;getting-started&#34;&gt;Getting started&lt;/h2&gt;
&lt;p&gt;This is a Rust command-line application.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cargo install --locked lignum&lt;/code&gt;, or get it from the &lt;a href=&#34;https://github.com/crazyscot/lignum&#34;&gt;source repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Run lignum in a directory that contains a git repository, or give it &lt;code&gt;--repo &amp;lt;path&amp;gt;&lt;/code&gt;.
If you have &lt;code&gt;xdot&lt;/code&gt; installed, the &lt;code&gt;-x&lt;/code&gt; option will pipe the output directly to xdot.&lt;/p&gt;
&lt;p&gt;Check the &lt;code&gt;--help&lt;/code&gt; message for more.&lt;/p&gt;</description>
      <enclosure url="https://www.chiark.greenend.org.uk/~ryounger/images/software/lignum.png" type="image" /></item>
    
    <item>
      <title>Announcing qcp</title>
      <link>https://www.chiark.greenend.org.uk/~ryounger/2024/11/announcing-qcp/</link>
      <pubDate>Sun, 03 Nov 2024 10:23:43 +1300</pubDate>
      
      <guid>https://www.chiark.greenend.org.uk/~ryounger/2024/11/announcing-qcp/</guid>
      <description>&lt;p&gt;The QUIC Copier (&lt;code&gt;qcp&lt;/code&gt;) is an experimental high-performance remote file copy utility for long-distance internet connections.&lt;/p&gt;
&lt;p&gt;Source repository: &lt;a href=&#34;https://github.com/crazyscot/qcp&#34;&gt;https://github.com/crazyscot/qcp&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;-features&#34;&gt;📋 Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🔧 Drop-in replacement for &lt;code&gt;scp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;🛡️ Similar security to &lt;code&gt;scp&lt;/code&gt;, using existing, well-known mechanisms&lt;/li&gt;
&lt;li&gt;🚀 Better throughput on congested networks&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;-about-qcp&#34;&gt;📖 About qcp&lt;/h2&gt;
&lt;p&gt;qcp is a &lt;em&gt;hybrid protocol&lt;/em&gt; combining ssh and &lt;a href=&#34;https://quicwg.github.io/&#34;&gt;QUIC&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We use ssh to establish a control channel to the target machine, then spin up the QUIC protocol to transfer data.&lt;/p&gt;
&lt;p&gt;This has the following useful properties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;User authentication is handled entirely by ssh&lt;/li&gt;
&lt;li&gt;Data is transmitted over UDP, avoiding known issues with TCP over &amp;ldquo;long, fat pipe&amp;rdquo; connections&lt;/li&gt;
&lt;li&gt;Data in transit is protected by TLS using ephemeral keys&lt;/li&gt;
&lt;li&gt;The security mechanisms all use existing, well-known cryptographic algorithms&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For full documentation refer to &lt;a href=&#34;https://docs.rs/qcp/latest/qcp/&#34;&gt;qcp on docs.rs&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;motivation&#34;&gt;Motivation&lt;/h3&gt;
&lt;p&gt;I needed to copy multiple large (3+ GB) files from a server in Europe to my home in New Zealand.&lt;/p&gt;
&lt;p&gt;I’ve got nothing against ssh or scp. They’re brilliant. I’ve been using them since the 1990s. However they run on top of TCP, which does not perform very well when the network is congested. With a fast fibre internet connection, a long round-trip time and noticeable packet loss, I was right in the sour spot. TCP did its thing and slowed down, but when the congestion cleared it was very slow to get back up to speed.&lt;/p&gt;
&lt;p&gt;If you’ve ever been frustrated by download performance from distant websites, you might have been experiencing this same issue. Friends with satellite (pre-Starlink) internet connections seem to be particularly badly affected.&lt;/p&gt;
&lt;h2 id=&#34;-getting-qcp&#34;&gt;💻 Getting qcp&lt;/h2&gt;
&lt;p&gt;The project is a Rust binary &lt;a href=&#34;https://crates.io/crates/qcp&#34;&gt;crate&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can install it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;as a Debian package or pre-compiled binary from the &lt;a href=&#34;https://github.com/crazyscot/qcp/releases/latest&#34;&gt;latest qcp release&lt;/a&gt; page (N.B. the Linux builds are static musl binaries);&lt;/li&gt;
&lt;li&gt;with &lt;code&gt;cargo install qcp&lt;/code&gt; (you will need to have a rust toolchain &lt;del&gt;and capnpc&lt;/del&gt; installed) &lt;em&gt;(the capnp dependency was removed later)&lt;/em&gt;;&lt;/li&gt;
&lt;li&gt;by cloning and building the &lt;a href=&#34;https://github.com/crazyscot/qcp&#34;&gt;source repository&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You will need to install qcp on both machines. Please refer to the &lt;a href=&#34;https://github.com/crazyscot/qcp/blob/main/README.md&#34;&gt;README&lt;/a&gt; for more.&lt;/p&gt;
&lt;h3 id=&#34;see-also&#34;&gt;See also&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.rfc-editor.org/rfc/rfc9000.html&#34;&gt;RFC9000 &amp;ldquo;QUIC: A UDP-Based Multiplexed and Secure Transport&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <enclosure url="https://www.chiark.greenend.org.uk/~ryounger/images/software/qcp-in-progress.png" type="image" /></item>
    
  </channel>
</rss>