<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated>2023-01-09T20:57:31Z</updated>
  <generator>https://nostr.now</generator>

  <title>Nostr notes by Doug Hoyte</title>
  <author>
    <name>Doug Hoyte</name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://nostr.now/npub1yxprsscnjw2e6myxz73mmzvnqw5kvzd5ffjya9ecjypc5l0gvgksh8qud4.rss" />
  <link href="https://nostr.now/npub1yxprsscnjw2e6myxz73mmzvnqw5kvzd5ffjya9ecjypc5l0gvgksh8qud4" />
  <id>https://nostr.now/npub1yxprsscnjw2e6myxz73mmzvnqw5kvzd5ffjya9ecjypc5l0gvgksh8qud4</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://nostr.now/nevent1qqsgejmv4xzfln88pwrvtpv9vtst3l2yxt5dhhnumxfg5d55d26gjzgzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6x9el2y</id>
    
      <title type="html">I think clients must be written to handle the case of individual ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsgejmv4xzfln88pwrvtpv9vtst3l2yxt5dhhnumxfg5d55d26gjzgzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6x9el2y" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9z3c280hal05xwxw3gukrt0sgj7ahkw2mxxfzl5n34stvweuuu8cuy74dl&#39;&gt;nevent1q…74dl&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;I think clients must be written to handle the case of individual relays missing/deleting data. If you&amp;#39;re low on disk-space, not much choice!&lt;br/&gt;&lt;br/&gt;You could have some kind of heuristics that delete unneeded notes, and keep the important ones (whatever that is for your use-case).
    </content>
    <updated>2026-04-10T13:05:21Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsynxff8znwrrdtacujkw5wenl0lneaujmznqzdvqxt7xm3qh4jgugzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6h4elf2</id>
    
      <title type="html">This is the first I&amp;#39;m hearing of it. Can you please point me ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsynxff8znwrrdtacujkw5wenl0lneaujmznqzdvqxt7xm3qh4jgugzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6h4elf2" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9rzzcutru78h6c8pv708cjwl0ylqpfnqs2qnxknsrxc627tkq7kqfhak26&#39;&gt;nevent1q…ak26&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;This is the first I&amp;#39;m hearing of it. Can you please point me to any more details? I don&amp;#39;t see anything related to negentropy in the commits you referenced.
    </content>
    <updated>2026-03-19T17:43:52Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsff4a3ansvwmpdvj62lelrk46r3t6ys67294vwtlfx3grscu2y4fszyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z697nlqn</id>
    
      <title type="html">strfry 1.1.0 release There are a lot of changes in this release. ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsff4a3ansvwmpdvj62lelrk46r3t6ys67294vwtlfx3grscu2y4fszyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z697nlqn" />
    <content type="html">
      strfry 1.1.0 release&lt;br/&gt;&lt;br/&gt;There are a lot of changes in this release. Some highlights:&lt;br/&gt;&lt;br/&gt;* Preliminary support for AUTH (NIP-42)&lt;br/&gt;* Support for COUNT requests (NIP-45)&lt;br/&gt;* Prometheus monitoring end-point&lt;br/&gt;* REQ filter validation: restrict which filters your relay will service&lt;br/&gt;* Configure your relay.info with npubs instead of 32-byte hex (optional)&lt;br/&gt;* Timeout-support for plugins to detect and recover from plugin hangs/crashes&lt;br/&gt;* Deletion of parameterised replaceable events now follows NIP-09&lt;br/&gt;* upload/download convenience commands to transfer notes to/from remote relays&lt;br/&gt;* Improved error messages for both external users and admins&lt;br/&gt;* Many small bugfixes and convenience features&lt;br/&gt;&lt;br/&gt;See here for the full list: &lt;a href=&#34;https://github.com/hoytech/strfry/blob/master/CHANGES&#34;&gt;https://github.com/hoytech/strfry/blob/master/CHANGES&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Thank you to everyone who contributed!&lt;br/&gt;&lt;br/&gt;There are no backwards-incompatible DB changes, so it should be a drop-in replacement for the 1.0.0 series. However, we always recommend backing up your DB first just in case.&lt;br/&gt;&lt;br/&gt;One thing to note: We are deprecating the `strfry stream` command. `strfry router` does everything stream did and much more.
    </content>
    <updated>2026-03-19T14:29:58Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsyw9rxm9u7px0tm4g68crt4eq3wwqul9ecnjcammyl4auhvtvfr7gzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6u7uae9</id>
    
      <title type="html">I believe they are working as per spec, but please let me know if ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsyw9rxm9u7px0tm4g68crt4eq3wwqul9ecnjcammyl4auhvtvfr7gzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6u7uae9" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxaa2xk9hadfym4xg6ksmu7j9nse4u9mmjt0txz072cs6538tehgqrt6sy5&#39;&gt;nevent1q…6sy5&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;I believe they are working as per spec, but please let me know if not.&lt;br/&gt;&lt;br/&gt;The beta-series finally implements the deletion of parameterised replaceable events with a-tags: &lt;a href=&#34;https://github.com/hoytech/strfry/issues/168&#34;&gt;https://github.com/hoytech/strfry/issues/168&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Is there anything in particular you&amp;#39;re wondering about?
    </content>
    <updated>2026-03-15T22:35:10Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqs0gtc7hxchp0fg52c38xgkdydhhhpggfmg88w7wu7f6shvm5nr9qszyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z69e9498</id>
    
      <title type="html">You&amp;#39;re welcome! Let me know if there&amp;#39;s anything you&amp;#39;d ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqs0gtc7hxchp0fg52c38xgkdydhhhpggfmg88w7wu7f6shvm5nr9qszyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z69e9498" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsre8vaxmwmd7sxz9ygq46um4crevyhuxy6kxfsaa5j3pmhn6zj4mcaw7lec&#39;&gt;nevent1q…7lec&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;You&amp;#39;re welcome! Let me know if there&amp;#39;s anything you&amp;#39;d like me to implement.
    </content>
    <updated>2026-03-15T22:31:28Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqspqekzel8ex5vj0fyfws6wfs858cgphfjsesd47223r22kd3puu7qzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6smzmmr</id>
    
      <title type="html">strfry 1.1.0 beta series: I&amp;#39;m working on a new release of ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqspqekzel8ex5vj0fyfws6wfs858cgphfjsesd47223r22kd3puu7qzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6smzmmr" />
    <content type="html">
      strfry 1.1.0 beta series:&lt;br/&gt;&lt;br/&gt;I&amp;#39;m working on a new release of strfry and there are some beta releases tagged in case anyone wants to give them a try. There are lots of changes in the queue. I&amp;#39;ll write them up in more detail soon.&lt;br/&gt;&lt;br/&gt;For now here&amp;#39;s a small new feature in 1.1.0-beta4: --range option for sync. Basically it&amp;#39;s a convenience feature for specifying since/until in your filter. Examples:&lt;br/&gt;&lt;br/&gt;strfry sync wss://blah.com --range 1h-&lt;br/&gt;&lt;br/&gt;^^ sync just last hour of notes&lt;br/&gt;&lt;br/&gt;strfry sync wss://blah.com --filter &amp;#39;{&amp;#34;kinds&amp;#34;:[0]}&amp;#39; --range 1Y-6M&lt;br/&gt;&lt;br/&gt;^^ sync kind 0 events between 1Y and 6M old&lt;br/&gt;&lt;br/&gt;This is especially useful for &amp;#34;paginating&amp;#34; big syncs. You can first do 2M-1M, then do 3M-2M, then 4M-3M, etc.
    </content>
    <updated>2026-03-15T14:33:10Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqspmraxsvv2a784nan0vwryud4m98fy44lf3s8p02c66wnvz9vgkdczyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z63epsu7</id>
    
      <title type="html">Here&amp;#39;s the video of it in action, it&amp;#39;s awesome! ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqspmraxsvv2a784nan0vwryud4m98fy44lf3s8p02c66wnvz9vgkdczyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z63epsu7" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsfvc3rlzph2s96znms8eqrdh5uhgpfrk3yjh9z36wrpedd6lt6y0cnhfxrq&#39;&gt;nevent1q…fxrq&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Here&amp;#39;s the video of it in action, it&amp;#39;s awesome!&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=rN7HYXmgxzk&#34;&gt;https://www.youtube.com/watch?v=rN7HYXmgxzk&lt;/a&gt;
    </content>
    <updated>2024-12-24T17:49:57Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsgn64g50qd374glmufznwnehgmdwgd3w5u02377rs0qnuxh0j377qzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z62xd6dy</id>
    
      <title type="html">Yep looks like the same approach to me.</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsgn64g50qd374glmufznwnehgmdwgd3w5u02377rs0qnuxh0j377qzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z62xd6dy" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqszmt7ccaxrhltx8z0kwp3u5ldqlvwv85yyk7f3n227x5ugfclelvc986tse&#39;&gt;nevent1q…6tse&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Yep looks like the same approach to me.
    </content>
    <updated>2024-12-20T19:44:48Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqs2l8z8d0hr0h8de687p55klpa386649urqkkrxgch9cg9l282d4aczyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6hlxspm</id>
    
      <title type="html">The answer to this is surprisingly complicated. TLS can ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqs2l8z8d0hr0h8de687p55klpa386649urqkkrxgch9cg9l282d4aczyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6hlxspm" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9307ld60jj7h8sqyf73za54jjcvk504ls0vcu3aw8u26jnq6h7uc0lrp3h&#39;&gt;nevent1q…rp3h&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;The answer to this is surprisingly complicated.&lt;br/&gt;&lt;br/&gt;TLS can optionally support compression which would most likely have universally worked for all wss:// connections. However, this was disabled in OpenSSL and other TLS libraries because of a critical information leakage that arises when secret and non-secret information are combined in the same compression context: &lt;a href=&#34;https://blog.qualys.com/product-tech/2012/09/14/crime-information-leakage-attack-against-ssltls&#34;&gt;https://blog.qualys.com/product-tech/2012/09/14/crime-information-leakage-attack-against-ssltls&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;HTTP-level compression does not apply to websockets (since its framing replaces/upgrades the HTTP framing) so instead compression is specified by the websocket RFCs. It is optional, so not all clients support this.&lt;br/&gt;&lt;br/&gt;Websocket compression happens per message, and can use an empty window for each message, or can have a &amp;#34;sliding compression&amp;#34; window where messages are effectively compressed with previous messages. Some implementations will support both of those modes, some only one, and some neither. Even if an implementation supports compression, it may choose not to use it, and/or may use it only for particular messages (and not others). Furthermore, in the websocket compression handshake, bi-directional window sizes need to be negotiated and sometimes windows cannot be negotiated in one or both directions.&lt;br/&gt;&lt;br/&gt;Almost all browser websocket clients support full compression with sliding windows in both directions, and so does strfry. The sliding window has a relatively large memory overhead per connection, so it can optionally be disabled. The compression ratios can be seen in the strfry logs.&lt;br/&gt;&lt;br/&gt;Although strfry &amp;lt;&amp;gt; browser connections are almost always compressed both ways, different clients and relays have different levels of support and often can&amp;#39;t negotiate optimal compression.
    </content>
    <updated>2024-09-14T00:22:34Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqs8wkse4lcxx8g300qzmwjk3092udng4f30hzpfjjd6kjuzfeykh3czyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6kd4kxm</id>
    
      <title type="html">&amp;gt; If you’re sending binary, base64 only inflates by 33% ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqs8wkse4lcxx8g300qzmwjk3092udng4f30hzpfjjd6kjuzfeykh3czyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6kd4kxm" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsr4uuejxs54ws6dxy77yklg4xkxvlqygnp4uwxqhnru3fac4jsk5gftqjk7&#39;&gt;nevent1q…qjk7&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;&amp;gt; If you’re sending binary, base64 only inflates by 33% compared to hex strings’ 100%.&lt;br/&gt;&lt;br/&gt;On purely random data, after compression hex is usually only ~10% bigger than base64. For example:&lt;br/&gt;&lt;br/&gt;    $ head -c 1000000 /dev/urandom &amp;gt; rand&lt;br/&gt;    $ alias hex=&amp;#39;od -A n -t x1 | sed &amp;#34;s/ *//g&amp;#34;&amp;#39;&lt;br/&gt;    $ cat rand |hex|zstd -c|wc -c&lt;br/&gt;    1086970&lt;br/&gt;    $ cat rand |base64|zstd -c|wc -c&lt;br/&gt;    1018226&lt;br/&gt;    $ wcalc 1086970/1018226&lt;br/&gt;     = 1.06751&lt;br/&gt;&lt;br/&gt;So only ~7% bigger in this case. When data is not purely random, hex often compresses *better* than base64. This is because hex preserves patterns on byte boundaries but base64 does not. For example, look at these two strings post-base64:&lt;br/&gt;&lt;br/&gt;    $ echo &amp;#39;hello world&amp;#39; | base64&lt;br/&gt;    aGVsbG8gd29ybGQK&lt;br/&gt;    $ echo &amp;#39; hello world&amp;#39; | base64&lt;br/&gt;    IGhlbGxvIHdvcmxkCg==&lt;br/&gt;&lt;br/&gt;They have nothing in common. Compare to the hex encoded versions:&lt;br/&gt;&lt;br/&gt;    $ echo &amp;#39;hello world&amp;#39; | hex&lt;br/&gt;    68656c6c6f20776f726c640a&lt;br/&gt;    $ echo &amp;#39; hello world&amp;#39; | hex&lt;br/&gt;    2068656c6c6f20776f726c640a&lt;br/&gt;&lt;br/&gt;The pattern is preserved, it is just shifted by 2 characters. This means that if &amp;#34;hello world&amp;#34; appears multiple times in the input, there may be two different patterns for it in Base64, but only one in hex (meaning hex effectively has a 2x larger compression dictionary).&lt;br/&gt;&lt;br/&gt;Since negentropy is mostly (but not entirely) random data like hashes and fingerprints, it&amp;#39;s probably a wash. However, hex is typically faster to encode/decode and furthermore is used for almost all other fields in the nostr protocol, so on the whole seems like the best choice.&lt;br/&gt;&lt;br/&gt;&amp;gt; Personally, I’d prefer to see the message format specified explicitly as debuggable JSON, if feasible.&lt;br/&gt;&lt;br/&gt;This is theoretically possible, but it would be very difficult to interpret/debug it anyway, and it would add a lot of bandwidth/CPU overhead.
    </content>
    <updated>2024-09-13T21:23:19Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsylffc9whpup0ryvzhaje7czkxa5p4fk6ccvctjrt8t9e2wh82keqzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6pqxmnt</id>
    
      <title type="html">The best way is to first upgrade to 0.9.7, which is the latest ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsylffc9whpup0ryvzhaje7czkxa5p4fk6ccvctjrt8t9e2wh82keqzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6pqxmnt" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswtzpzlmqjenzjjw4udx8ft6eax3awvpduhlpspc3r6ulyknvdfwg0sukg6&#39;&gt;nevent1q…ukg6&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;The best way is to first upgrade to 0.9.7, which is the latest release in the 0.9 series. This has the &amp;#34;--fried&amp;#34; option for export (but not import).&lt;br/&gt;&lt;br/&gt;After you have the fried export, upgrade to 1.0.0 and import with &amp;#34;--fried&amp;#34; too.&lt;br/&gt;&lt;br/&gt;Sorry for the trouble, but it will save a *lot* of time versus normal import!
    </content>
    <updated>2024-09-13T19:36:02Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsff0hau7guqc6dpaeplajqm652yzyldnax52lxu5vswlmff2vg9nczyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6htnpup</id>
    
      <title type="html">NIP-77 I believe is still a draft/work-in-progress, so I ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsff0hau7guqc6dpaeplajqm652yzyldnax52lxu5vswlmff2vg9nczyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6htnpup" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvpafepk9n3jxw95zk5dnu8ymaddx3kp93tundmu273jlh9dmnz9gqj2h7n&#39;&gt;nevent1q…2h7n&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;NIP-77 I believe is still a draft/work-in-progress, so I don&amp;#39;t know the final form yet.&lt;br/&gt;&lt;br/&gt;I think fiatjaf&amp;#39;s intent was just to standardise the nostr integration, rather than negentropy as a whole. I guess this is similar to how JSON/SHA256/secp256k/etc are not themselves specified in NIPs, but instead external specifications are referred to. That said, the negentropy spec is relatively straightforward and there are already at least 5 implementations (and I know of some more in development too): &lt;a href=&#34;https://github.com/hoytech/negentropy/tree/master?tab=readme-ov-file#definitions&#34;&gt;https://github.com/hoytech/negentropy/tree/master?tab=readme-ov-file#definitions&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt; It also doesn’t seem to cover the actual sending of events in either direction (after the sets have been reconciled).&lt;br/&gt;&lt;br/&gt;True, but by design this is out-of-scope of the negentropy protocol. Negentropy just performs a set reconciliation so the client knows which IDs it has and/or needs. It is then up to it to decide what to do. Currently `strfry sync` will post events it has with regular EVENT messages, and/or download events it needs with regular REQ messages.&lt;br/&gt;&lt;br/&gt;However, there are a lot of other possibilities. If a client is only interested in uploading (or downloading), it may only do one of those actions. In fact it may just store those IDs and fetch them later, or through some other relay or mechanism. Alternatively, if a client doesn&amp;#39;t actually care about the event contents and is only trying to compute an aggregate &amp;#34;reaction count&amp;#34; across relays, it may never actually download the events, and purely use negentropy for de-duplication purposes.
    </content>
    <updated>2024-09-13T19:33:28Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqspdtx43t6kvtw5rgwe2e0c0egxhhcgpza25tys88gyph4v7p642eqzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6h5yuh9</id>
    
      <title type="html">Oh no, I missed this one, thanks for linking! This is a really ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqspdtx43t6kvtw5rgwe2e0c0egxhhcgpza25tys88gyph4v7p642eqzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6h5yuh9" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsx772kxjrtp7luzwmmkcr0ay0c7d2l5dmagheycef2xpt29c7askgxfe0yf&#39;&gt;nevent1q…e0yf&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Oh no, I missed this one, thanks for linking! This is a really good write-up and there are a lot of similarities with what I&amp;#39;m designing for strfry proxy. Like some of the comments, I&amp;#39;m not sure if partitioning on ID will be optimal in all cases. I can also imagine variations on pubkey and created_at.&lt;br/&gt;&lt;br/&gt;Some variant of consistent hashing will also be necessary I think, for failure recovery, rebalancing, changing the number of backend relays, etc.
    </content>
    <updated>2024-09-13T19:17:08Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsgvga7qd3jhhu9u9qvya0a7leekg8p8y7rsyty7ke9vcnjge3stzszyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6tlmt0t</id>
    
      <title type="html">I just tagged strfry 1.0.0. Here are some of the highlights: * ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsgvga7qd3jhhu9u9qvya0a7leekg8p8y7rsyty7ke9vcnjge3stzszyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6tlmt0t" />
    <content type="html">
      I just tagged strfry 1.0.0. Here are some of the highlights:&lt;br/&gt;&lt;br/&gt;* negentropy protocol 1: This is the result of a lot of R&amp;amp;D on different syncing protocols, trying to find the best fit for nostr. I&amp;#39;m pretty excited about the result. Negentropy sync has now been allocated NIP 77.&lt;br/&gt;* Better error messages for users and operators.&lt;br/&gt;* Docs have been updated and refreshed.&lt;br/&gt;* Lots of optimisations: Better CPU/memory usage, smaller DBs.&lt;br/&gt;&lt;br/&gt;Export/import has been sped up a lot: 10x faster or more. This should help reduce the pain of DB upgrades (which is required for this release). Instructions on upgrading are available here:&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://github.com/hoytech/strfry?tab=readme-ov-file#db-upgrade&#34;&gt;https://github.com/hoytech/strfry?tab=readme-ov-file#db-upgrade&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Thanks to everyone who has helped develop/debug/test strfry over the past 2 years, and for all the kind words and encouragement. The nostr community rocks!&lt;br/&gt;&lt;br/&gt;We&amp;#39;ve got a few things in the pipeline for strfry:&lt;br/&gt;&lt;br/&gt;* strfry proxy: This will be a new feature for the router that enables intelligent reverse proxying for the nostr protocol. This will help scale up mega-sized relays by allowing the storage and processing workload to be split across multiple independent machines. Various partitioning schemes will be supported depending on performance and redundancy requirements. The front-end router instances will perform multiple concurrent nostr queries to the backend relays, and merge their results into a single stream for the original client.&lt;br/&gt;* As well as scaling up, reverse proxying can also help scale down. By dynamically incorporating relay list settings (NIP-65), nostr queries can be satisfied by proxying requests to external relays on behalf of a client and merging the results together along with any matching cached local events. Negentropy will be used where possible to avoid wasting bandwidth on duplicate events.&lt;br/&gt;* Archival mode: Currently strfry stores all events fully indexed in its main DB, along with their full JSON representations (optionally zstd dictionary compressed). For old events that are queried infrequently, space usage can be reduced considerably. As well as deindexing, we are planning on taking advantage of columnar storage, aggregation of reaction events, and other tricks. This will play nicely with strfry proxy, and events can gradually migrate to the archival relays.&lt;br/&gt;* Last but not least, our website &lt;a href=&#34;https://oddbean.com&#34;&gt;https://oddbean.com&lt;/a&gt; is going to get some love. Custom algorithms, search, bugfixes, better relay coverage, and more!
    </content>
    <updated>2024-09-13T05:54:31Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqs8vx9y325lnlv3zyqrq75al27rsdpkg04kfy06awmdjsl3acvqx3szyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6dee0nl</id>
    
      <title type="html">I just tagged 2 strfry releases: 0.9.7 and 1.0.0-beta1 ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqs8vx9y325lnlv3zyqrq75al27rsdpkg04kfy06awmdjsl3acvqx3szyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6dee0nl" />
    <content type="html">
      I just tagged 2 strfry releases: 0.9.7 and 1.0.0-beta1&lt;br/&gt;&lt;br/&gt;1.0.0-beta1 is a candidate release of strfry 1.0.0 -- help is needed testing!&lt;br/&gt;&lt;br/&gt;The internal strfry DB version has been increased to 3, which means that you will need to rebuild your DBs to use this new version.&lt;br/&gt;&lt;br/&gt;0.9.7 has some bugfixes and changes that accumulated in master, and has a &amp;#34;strfry export --fried&amp;#34; feature that can be used to create DB exports that can be rapidly imported by 1.0.0 series releases.&lt;br/&gt;&lt;br/&gt;The full changelogs are available here: &lt;a href=&#34;https://github.com/hoytech/strfry/blob/1f34794945cf380035822278c46070a9923129f3/CHANGES&#34;&gt;https://github.com/hoytech/strfry/blob/1f34794945cf380035822278c46070a9923129f3/CHANGES&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Thank you to everyone who contributed and helps testing! If you need help or run into any issues, reply on nostr or stop by our telegram channel.
    </content>
    <updated>2024-09-05T22:17:26Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsxvvc6ksg4rz9mpfxdmuggvekty565lg2her9f684nmckqyc0xw2czyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z68cx86s</id>
    
      <title type="html">Yes, I saw -- it means a lot, especially coming from jb55. ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsxvvc6ksg4rz9mpfxdmuggvekty565lg2her9f684nmckqyc0xw2czyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z68cx86s" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxjkg7hw95n2m7jx26dltw9z02akhy2l7ry0q9d3pfrhd5a87fj3quur6az&#39;&gt;nevent1q…r6az&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Yes, I saw -- it means a lot, especially coming from jb55. Thanks!
    </content>
    <updated>2024-09-01T18:32:26Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsd7nj66kaf6gmh5s2k9xyauwxsj3yuxrg7w9cev9s6ndt9uvyk9jgzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6yuhp9p</id>
    
      <title type="html">FWIW I agree with you. Right now the front page is really boring. ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsd7nj66kaf6gmh5s2k9xyauwxsj3yuxrg7w9cev9s6ndt9uvyk9jgzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6yuhp9p" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs86fc3ucugxg6m0p2zyy46prynav9kej6v2d32n8zm4lx6usshsqcwyhhk4&#39;&gt;nevent1q…hhk4&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;FWIW I agree with you. Right now the front page is really boring. I have some ideas and I&amp;#39;m working on it!
    </content>
    <updated>2023-09-29T13:19:39Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsqqh8kjfg298k5fg84qqcym0kpvvwcwfx55tmdv3mwa5yhahushqgzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6tu2kpp</id>
    
      <title type="html">Thank you!!</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsqqh8kjfg298k5fg84qqcym0kpvvwcwfx55tmdv3mwa5yhahushqgzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6tu2kpp" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsg9x3v0r408tpftsxnts5vmupgmgyd2hskyf4atqv5r55xz924p0qd6plva&#39;&gt;nevent1q…plva&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Thank you!!
    </content>
    <updated>2023-09-28T06:25:18Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqs249sz89y9tr42zef20yzwvdljksmz0rfp8300468l7trpyzcsj9qzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z69fp4fm</id>
    
      <title type="html">Yes, I have seen nostrdb. I think it&amp;#39;s a great idea, and that ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqs249sz89y9tr42zef20yzwvdljksmz0rfp8300468l7trpyzcsj9qzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z69fp4fm" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvyuw2uvjnlevvfxw94vktu9qrslul57dqdgk3g5y03mvp932k7dstxmpha&#39;&gt;nevent1q…mpha&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Yes, I have seen nostrdb. I think it&amp;#39;s a great idea, and that it will be a big benefit for native clients. Let me know if I can help in any way!&lt;br/&gt;&lt;br/&gt;I was thinking about it a bit and maybe flatbuffers is a bit overkill for the indexed nostr events in strfry, and I&amp;#39;m working on a branch that uses a custom event representation similar to nostrdb. I usually use flatbuffers by default because the generated code is convenient and it&amp;#39;s easy to evolve the schema in a backwards compatible way. Also it comes with some nice utilities for debugging and securely parsing untrusted data (not needed here).&lt;br/&gt;&lt;br/&gt;BUT the core nostr event layout is pretty much fixed and saving some space here is important not least because it will let us pack more records into the page cache. I&amp;#39;ll keep you posted on how that goes. Cheers!
    </content>
    <updated>2023-09-13T00:10:43Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqs25vze6wfylvjajf67taw7e0pqray6xclyy2ec0g9a0ckm7e822kczyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z68m69hu</id>
    
      <title type="html">600ms seems too long for that set size. I will take a look at the ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqs25vze6wfylvjajf67taw7e0pqray6xclyy2ec0g9a0ckm7e822kczyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z68m69hu" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8vvlj3hen6znnxdshv79yq4pc0n7wklwkfz256le4wdfqylyqnes9dd4ly&#39;&gt;nevent1q…d4ly&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;600ms seems too long for that set size. I will take a look at the performance when I have my Rust harness working. Let&amp;#39;s make sure it&amp;#39;s working the same way as the C&#43;&#43;/JS impls first, and then we can see if there any speed-ups.&lt;br/&gt;&lt;br/&gt;One optimisation I did in the C&#43;&#43; was to ensure that the XORing is always done word-wise, instead of byte-for-byte. In fact, with attention to the alignment, I got the compiler to emit PXOR SIMD instructions to do multiple words in a single instruction.&lt;br/&gt;&lt;br/&gt;That&amp;#39;s very cool about the UniFFI bindings, I&amp;#39;m looking forward to it!
    </content>
    <updated>2023-09-12T07:13:09Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsxkckk26uv40ks7garxh3qjlk9m9899j3v0kn24r4zfd8rfauyuqgzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6n98wp4</id>
    
      <title type="html">Hehe thank you!</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsxkckk26uv40ks7garxh3qjlk9m9899j3v0kn24r4zfd8rfauyuqgzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6n98wp4" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9rwu7dgn7qhwhmjv22vyg8jzvxzhz656spwl8jl59x3ypddltz5gemk73c&#39;&gt;nevent1q…k73c&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Hehe thank you!
    </content>
    <updated>2023-07-14T16:47:15Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqs8l6y8mee9hprzm0mgdw788gkj7sac0q6k5fc62qq2e92gahy3e9szyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z67e8z8m</id>
    
      <title type="html">Hey all! I&amp;#39;m going to be doing a talk on nostr and the ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqs8l6y8mee9hprzm0mgdw788gkj7sac0q6k5fc62qq2e92gahy3e9szyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z67e8z8m" />
    <content type="html">
      Hey all! I&amp;#39;m going to be doing a talk on nostr and the architecture of the strfry relay. It&amp;#39;s next week at the CppNorth conference in Toronto, Canada:&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://cppnorth.ca/speaker-doug-hoyte.html&#34;&gt;https://cppnorth.ca/speaker-doug-hoyte.html&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;If anyone&amp;#39;s around, it&amp;#39;ll be a pretty fun conference! You can enter NOSTR in the checkout to get a discount on the ticket.
    </content>
    <updated>2023-07-13T12:10:04Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsrqwjp30v85r3aypaj03j0ehu450td9rett5nmgtfxx47cvxq444szyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z609msr5</id>
    
      <title type="html">Hi! Yeah, sorry, the sync support has been broken for a little ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsrqwjp30v85r3aypaj03j0ehu450td9rett5nmgtfxx47cvxq444szyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z609msr5" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvutf3wsv65mc8j04cp0gsls6a4fwsx258dzezjv03ar9ugalq57s9w8gl5&#39;&gt;nevent1q…8gl5&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Hi! Yeah, sorry, the sync support has been broken for a little while. However, this is now fixed in the `next` branch and very soon there will be a 1.0.0 release with this included.
    </content>
    <updated>2023-06-09T19:03:00Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqs2znw2j4juumhv6cn2ahm879kse3ja6ytr2tg652zx7stgsyfnreszyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z60qvx2s</id>
    
      <title type="html">Hey guys, sorry for the delay! Just to clarify: You&amp;#39;d like it ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqs2znw2j4juumhv6cn2ahm879kse3ja6ytr2tg652zx7stgsyfnreszyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z60qvx2s" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsquznnhjtewp2cd0ggdyah02qqq3w2t4jye6nrazxqa6uhg2sfyase93l3s&#39;&gt;nevent1q…3l3s&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Hey guys, sorry for the delay!&lt;br/&gt;&lt;br/&gt;Just to clarify: You&amp;#39;d like it so a particular user (authenticated in some way, maybe NIP-42?) can only access a subset of the keys in the DB?&lt;br/&gt;&lt;br/&gt;I think that would be possible (assuming authentication is implemented of course). As Mike sas, it wouldn&amp;#39;t be quite as easy as with SQL, where you could add a WHERE clause to all the required queries. However, I think you could do it in a way that wouldn&amp;#39;t affect performance drastically.&lt;br/&gt;&lt;br/&gt;If the sets of events for each user are mostly disjoint (not too many duplicated), then you could possibly run a strfry instance for each user. A running instance has a relatively low overhead, especially if you scale down the various thread counts.
    </content>
    <updated>2023-05-05T17:41:38Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsfm9pkql6cfmk7f6rlrfg4d70ch2jgy4rlankthrulwp6s84v2zmgzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6urr4f9</id>
    
      <title type="html">Thanks! I&amp;#39;m looking forward to actually testing strfry on ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsfm9pkql6cfmk7f6rlrfg4d70ch2jgy4rlankthrulwp6s84v2zmgzyqscywzrzwfet8tvsct680vfjvp6jesfk39xgn5h8zgs8znaap3z6urr4f9" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs2n0fp9fe6s5asnztzj5hzh2ccwwq68uq6whda33mu04gl7qsnutcpr4mhxue69uhkummnw3ez6ur4vgh8wetvd3hhyer9wghxuet586mtyv&#39;&gt;nevent1q…mtyv&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Thanks! I&amp;#39;m looking forward to actually testing strfry on production traffic. :)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;I think the merkle-tree syncing could really help with distributing data amongst relays too, I&amp;#39;m going to write more on this shortly.
    </content>
    <updated>2023-01-10T18:22:03Z</updated>
  </entry>

</feed>