<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Pages on Inorderly.com</title>
    <link>https://inorderly.com/pages/</link>
    <description>Recent content in Pages on Inorderly.com</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <atom:link href="https://inorderly.com/pages/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>About</title>
      <link>https://inorderly.com/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://inorderly.com/about/</guid>
      <description>&lt;p&gt;inorderly.com is the home of Inorderly, a small Go engine for deterministic event ordering. It takes events that arrive late, twice or out of order and releases them as one sequence. Give it the same events again, in any order and with any repeats, and it writes the same sequence, byte for byte.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-it-exists&#34;&gt;Why It Exists&lt;/h2&gt;&#xA;&lt;p&gt;Events rarely arrive the way they happened. A webhook provider retries, so an order shows up twice. Two services stamp events with clocks that disagree, so a payment looks older than the order it pays for. A feed handler sees tick 88 before tick 87. Most teams patch this with a dedupe table, a sort buffer and a timeout, and the patch mostly works.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Contact</title>
      <link>https://inorderly.com/contact/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://inorderly.com/contact/</guid>
      <description>&lt;p&gt;inorderly.com would like to hear from:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Anyone trying Inorderly out.&lt;/strong&gt; What worked, what got in the way, and what you used before.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Anyone who found a bug.&lt;/strong&gt; Above all, two runs over the same events that gave different output.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Anyone with an idea&lt;/strong&gt; for something Inorderly should do next.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Write to &lt;strong&gt;&lt;a href=&#34;mailto:info@inorderly.com&#34;&gt;info@inorderly.com&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Bug reports are also welcome on &lt;a href=&#34;https://github.com/inorderly/inorderly/issues&#34;&gt;GitHub&lt;/a&gt;. It helps to include what &lt;code&gt;inorderly version&lt;/code&gt; prints, your operating system, the flags you used, and a few made-up events that show the problem. Please don&amp;rsquo;t send real customer data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Download Inorderly</title>
      <link>https://inorderly.com/download/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://inorderly.com/download/</guid>
      <description>&lt;p&gt;Each archive below holds the &lt;code&gt;inorderly&lt;/code&gt; command with the license files and README. There&amp;rsquo;s nothing else to install. The links always point to the latest release.&lt;/p&gt;&#xA;&lt;div style=&#34;overflow-x:auto&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;System&lt;/th&gt;&#xA;          &lt;th&gt;Download&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Linux, x86-64&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/inorderly/inorderly/releases/latest/download/inorderly_linux_amd64.tar.gz&#34;&gt;inorderly_linux_amd64.tar.gz&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Linux, ARM64&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/inorderly/inorderly/releases/latest/download/inorderly_linux_arm64.tar.gz&#34;&gt;inorderly_linux_arm64.tar.gz&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;macOS, Apple silicon&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/inorderly/inorderly/releases/latest/download/inorderly_darwin_arm64.tar.gz&#34;&gt;inorderly_darwin_arm64.tar.gz&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;macOS, Intel&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/inorderly/inorderly/releases/latest/download/inorderly_darwin_amd64.tar.gz&#34;&gt;inorderly_darwin_amd64.tar.gz&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Windows, x86-64&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/inorderly/inorderly/releases/latest/download/inorderly_windows_amd64.zip&#34;&gt;inorderly_windows_amd64.zip&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;em&gt;Checksums are in &lt;a href=&#34;https://github.com/inorderly/inorderly/releases/latest/download/SHA256SUMS&#34;&gt;SHA256SUMS&lt;/a&gt;. Every release is listed on &lt;a href=&#34;https://github.com/inorderly/inorderly/releases&#34;&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;install&#34;&gt;Install&lt;/h2&gt;&#xA;&lt;p&gt;On Linux or macOS:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tar -xzf inorderly_linux_amd64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo mv inorderly /usr/local/bin/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;inorderly version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The binaries are pure Go and need no system libraries. The macOS ones aren&amp;rsquo;t signed by Apple, and macOS may ask you to allow them the first time. You can also clear the flag yourself:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quick Start</title>
      <link>https://inorderly.com/quick-start/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://inorderly.com/quick-start/</guid>
      <description>&lt;p&gt;This takes about five minutes. You&amp;rsquo;ll feed the same events to Inorderly in different orders, with repeats, and see the same output and the same hash come back every time. You need the &lt;code&gt;inorderly&lt;/code&gt; command from the &lt;a href=&#34;https://inorderly.com/download/&#34;&gt;download page&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-write-some-events&#34;&gt;1. Write Some Events&lt;/h2&gt;&#xA;&lt;p&gt;Inorderly reads one JSON event per line. Save these five lines as &lt;code&gt;events.ndjson&lt;/code&gt;. They&amp;rsquo;re an order, its payment and its shipment from three services, a second order, and the first order again, the way a retried webhook would send it:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reference</title>
      <link>https://inorderly.com/reference/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://inorderly.com/reference/</guid>
      <description>&lt;p&gt;The command, its files and the Go packages, for Inorderly 0.1. &lt;a href=&#34;https://github.com/inorderly/inorderly/blob/main/docs/CONTRACT.md&#34;&gt;The contract&lt;/a&gt; on GitHub has the exact ordering rules.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-command&#34;&gt;The Command&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;inorderly [flags]           read NDJSON events, write them in order&#xA;inorderly version           print the version as JSON&#xA;inorderly demo [flags]      run the self-checking demo and print its report&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;flags&#34;&gt;Flags&lt;/h3&gt;&#xA;&lt;div style=&#34;overflow-x:auto&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Flag&lt;/th&gt;&#xA;          &lt;th&gt;Default&lt;/th&gt;&#xA;          &lt;th&gt;Meaning&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;-in FILE&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;standard input&lt;/td&gt;&#xA;          &lt;td&gt;An input file. Repeat it to read several files a line at a time in turn: one line from the first, one from the second, and so on. &lt;code&gt;-&lt;/code&gt; is standard input.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;-out FILE&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;standard output&lt;/td&gt;&#xA;          &lt;td&gt;The ordered output.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;-window N&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;          &lt;td&gt;How far, in event-time units, an event may arrive behind the newest time seen.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;-hold N&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;the window&lt;/td&gt;&#xA;          &lt;td&gt;How long past its own time an event waits for a parent.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;-remember N&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;0 (always)&lt;/td&gt;&#xA;          &lt;td&gt;How long behind the watermark released events are remembered, for duplicates and parents.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;-rejects FILE&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;none&lt;/td&gt;&#xA;          &lt;td&gt;Late, conflicting and invalid lines, one JSON object each.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;-state DIR&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;none&lt;/td&gt;&#xA;          &lt;td&gt;Checkpoints. A run killed part way carries on from the last checkpoint when started again with the same flags. Needs &lt;code&gt;-in&lt;/code&gt; files and an &lt;code&gt;-out&lt;/code&gt; file.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;-checkpoint-every N&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;10000&lt;/td&gt;&#xA;          &lt;td&gt;Input lines between checkpoints.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;-stats FILE&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;standard error&lt;/td&gt;&#xA;          &lt;td&gt;Where the summary goes.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;-strict&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;off&lt;/td&gt;&#xA;          &lt;td&gt;Exit with status 3 if any line was late, conflicting or invalid.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;input&#34;&gt;Input&lt;/h3&gt;&#xA;&lt;p&gt;One event per line, as JSON. Blank lines are skipped. Lines may end in &lt;code&gt;\n&lt;/code&gt;&#xA;or &lt;code&gt;\r\n&lt;/code&gt;, and the last line needs no line ending. A line longer than 16 MiB&#xA;is invalid. Unknown fields, a missing &lt;code&gt;producer&lt;/code&gt; or &lt;code&gt;time&lt;/code&gt;, a fraction where&#xA;an integer belongs, a key repeated in one &lt;code&gt;data&lt;/code&gt; object, or anything after the&#xA;event on the same line make the line invalid.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
