profile
viewpoint
Herb Caudill HerbCaudill DevResults Barcelona devresults.com

covidatlas/coronadatascraper 370

COVID-19 Coronavirus data scraped from government and curated data sources.

DevResults/cevitxe 64

A Redux-based state container for local-first software, offering seamless synchronization using Automerge CRDTs.

HerbCaudill/ahk-scripts 0

My AutoHotKey scripts

HerbCaudill/appsync-todos 0

Following tutorial at https://github.com/awslabs/aws-mobile-appsync-sdk-js/tree/master/tutorials/react-offline-realtime-todos

HerbCaudill/automerge 0

A JSON-like data structure (a CRDT) that can be modified concurrently by different users, and merged again automatically.

HerbCaudill/automerge-benchmark 0

Performance tests for automerge

startedHerbCaudill/jsonschema2graphql

started time in 3 hours

pull request commentautomerge/automerge

Add cevitxe to readme under 'Sending and receiving changes'

Great, thank you!

HerbCaudill

comment created time in 16 hours

PR merged automerge/automerge

Add cevitxe to readme under 'Sending and receiving changes'

see https://github.com/automerge/automerge/pull/284#issuecomment-734817546

+10 -5

0 comment

1 changed file

HerbCaudill

pr closed time in 16 hours

push eventautomerge/automerge

HerbCaudill

commit sha 089e84fc6103f01cf9e97135ac15a974e951ab5b

add cevitxe to readme under 'Sending and receiving changes'

view details

Martin Kleppmann

commit sha 08f884026d3e73d3c50ae7fbad212d3fe74da930

Revert unrelated changes

view details

Martin Kleppmann

commit sha fed28a58ceebe9ea6e3469e496c1de4ed942e6cc

Merge pull request #289 from HerbCaudill/readme-cevitxe add cevitxe to readme under 'Sending and receiving changes'

view details

push time in 16 hours

push eventautomerge/automerge

Martin Kleppmann

commit sha 2009189a9ff1f8659e720c0403e9a675b258b3f6

Remove transit dependency

view details

Martin Kleppmann

commit sha d70083ab43a0f91232836ff5f7abd8acf6cc79f9

Make BackendDoc.applyChanges match Backend.applyChanges

view details

Martin Kleppmann

commit sha f3743200b5f3c68ee4dc1c60004e17d81f548f25

Remove the undo/redo feature It's too much work to support for now, and it was never really well thought-out. Better to remove it for now, and bring back in well-conceived form in the future.

view details

Martin Kleppmann

commit sha f4102e6d3acf3a3ae72ed42b11428246363b2c21

Remove Backend.getChangesForActor()

view details

push time in 16 hours

pull request commentautomerge/automerge

Allow hooking into patch application

Thanks @ept that is very useful for my use case. It will simplify the code receiving remote changes and applying them both to the Automerge document and the user facing representation of the document.

ept

comment created time in 19 hours

Pull request review commentautomerge/automerge

Allow hooking into patch application

 function getAllChanges(doc) {   return getChanges(init(), doc) } -function applyChanges(doc, changes) {+function applyChanges(doc, changes, options = {}) {

I'm with @HerbCaudill here. I think this kind of options hash is common in JavaScript, since it gives us something a bit like named parameters in the absence of language support, and it allows us to add further options in the future without breaking existing code. Moreover, lots of existing functions in the Automerge API (init, from, load, change, etc.) already take an options hash. I don't see a problem with passing a function as part of an options hash: in JS, functions are values like any other.

ept

comment created time in 21 hours

Pull request review commentautomerge/automerge

Allow hooking into patch application

 function getAllChanges(doc) {   return getChanges(init(), doc) } -function applyChanges(doc, changes) {+function applyChanges(doc, changes, options = {}) {

I agree that readability would improve on the call side. But I think that's caused by missing labeled arguments in JavaScript which we should not try to fix.

When just reading function applyChanges(doc, changes, options = {}) I would expect to pass a document, some changes and a map which only contains key value pair, which help configuring the change method. I would not expect to pass references into options which provide me with the resulting patches.

On the other hand when reading function applyChanges(doc, changes, patchCallback) it is clear to me that I can pass a document, changes and a callback which provides some kind of patches. (It is also future prove to just add another parameter)

This is not really a strong opinion, so I am happy to go with options map as well :)

ept

comment created time in 21 hours

startedHerbCaudill/react-redux-worker

started time in a day

pull request commentautomerge/automerge

add Automerge.getClock and Automerge.getMissingChanges

Thanks for doing clean-up. :)

josharian

comment created time in a day

pull request commentautomerge/automerge

add Automerge.getClock and Automerge.getMissingChanges

@HerbCaudill By the way, I just realised that Cevitxe isn't listed as one of the data sync layers in the README. I've put a brief one-sentence description in here: 66793306c9a6d0536c086f56de4bc7d1ef8e8c84 — does this look ok? Feel free to change it to be better.

josharian

comment created time in 2 days

Pull request review commentautomerge/automerge

Allow hooking into patch application

 function getAllChanges(doc) {   return getChanges(init(), doc) } -function applyChanges(doc, changes) {+function applyChanges(doc, changes, options = {}) {

why is there an options map needed. Could we just pass the callback directly?

ept

comment created time in 2 days

Pull request review commentautomerge/automerge

Allow hooking into patch application

 function docFromChanges(options, changes) {   const doc = init(options)   const [state, _] = Backend.applyChanges(Backend.init(), changes)   const patch = Backend.getPatch(state)+  if (options && options.patchCallback) options.patchCallback(Object.assign({}, patch))

Same as above

ept

comment created time in 2 days

Pull request review commentautomerge/automerge

Allow hooking into patch application

 function getAllChanges(doc) {   return getChanges(init(), doc) } -function applyChanges(doc, changes) {+function applyChanges(doc, changes, options = {}) {   const oldState = Frontend.getBackendState(doc)   const [newState, patch] = Backend.applyChanges(oldState, changes)+  if (options.patchCallback) options.patchCallback(Object.assign({}, patch))

I would prefer a operate line + indentation, which improves readability, safety and debuggablility.

ept

comment created time in 2 days

Pull request review commentautomerge/automerge

Allow hooking into patch application

 function makeChange(doc, requestType, context, options) {    if (doc[OPTIONS].backend) {     const [backendState, patch] = doc[OPTIONS].backend.applyLocalChange(state.backendState, request)+    if (options && options.patchCallback) options.patchCallback(patch)

I would prefer a operate line + indentation, which improves readability, safety and debuggablility.

ept

comment created time in 2 days

push eventautomerge/automerge

Martin Kleppmann

commit sha 7942fed63a152949f78be5818741cf7d5e381941

Add patchCallback to Automerge.load as well

view details

push time in 2 days

PR opened automerge/automerge

Allow hooking into patch application

Here is a simple but potentially very important feature: allowing applications to hook into Automerge's process for applying patches to a document.

The use case is when you have some data outside of Automerge that you want to keep consistent with the state of an Automerge document. This could be a user interface (especially a complicated widget like a text editor), or a cache, a search index, or suchlike. Such an application needs a mechanism to get notified when an Automerge document changes, so that it can apply the appropriate update to the external state.

At the moment, Automerge only really supports the React-style approach where you pass the entire document to the render function, and the renderer works out which bits of the document have actually changed, and updates those, while leaving the unchanged parts untouched. But in other circumstances, it would be really useful to have a description of the change that occurred, not just the before-and-after document. Moreover, this process should be the same, regardless of whether a change is generated by the local user or was received over the network from a remote user.

Automerge's existing concept of a patch is probably the best form we have for describing what change occurred. It's easier for applications to consume than the raw change format because it includes more context, and e.g. for list updates it includes the index of the list position being changed, not just the list element ID. This patch format is currently used for updates sent from the backend to the frontend, and used by the frontend to update the document.

This PR adds the ability for applications to get a callback for every patch that is applied to a document. When making a local change, you can add a callback like this:

newState = Automerge.change(oldState, {patchCallback: (patch) => {...}}, doc => {
  // mutate doc as usual
})

And when applying a remote change, you can add a callback like this:

newState = Automerge.applyChanges(oldState, changes, {patchCallback: (patch) => {...}})

The patch format is the same in both cases. The patch format used by the currently released version of Automerge is documented in INTERNALS.md (in the "Frontend-backend protocol" section). This format has changed considerably on the performance branch, and the new format is documented in BINARY_FORMAT.md on that branch. The new format is intended to be easier to consume.

Note that this API is not intended to allow applications to modify the patches before they get applied. The patch callback should treat the patch as read-only.

An alternative API would be to pass in a callback function once when initialising the document, and automatically calling it on all subsequent updates. But I thought that had a bit of a "spooky action at a distance" feel, while the callback on every change/applyChanges call was more explicit. Though it could also be annoying for app developers to have to add the option to every single Automerge.change call, which might be scattered around an application. Any thoughts on this?

This feature is especially for @cklokmose, but I welcome feedback from others as well. @HerbCaudill what do you think?

+60 -1

0 comment

3 changed files

pr created time in 2 days

create barnchautomerge/automerge

branch : patch-callback

created branch time in 2 days

issue commentautomerge/automerge

Python Implementation of the Automerge Server?

Relaying

Agree. We have that notion in place in our experiments https://github.com/jupyterlab/rtc/tree/main/packages/relay

All it needs to do is establish that Alice and Bob are interested in the same topic,

Is it completely automerge agnostic? I would expect the interest in a topic resided in the content of the automerge CRDT messages?

Availability

Agree also with your explanations. On top of availability, server also allows to ensure persistence (in jupyter case, the persistence of the notebooks).

Authentication

+1

echarles

comment created time in 2 days

pull request commentautomerge/automerge

add Automerge.getClock and Automerge.getMissingChanges

Hi @josharian, this is a great contribution, thank you! I have made a few changes in an additional commit, in particular I kept the argument order as getMissingChanges(doc, clock) rather than the other way round. I understand your reasoning for having the clock first, as it more closely mirrors the getChanges(oldDoc, newDoc), but there's already an existing backend function called getMissingChanges that puts the doc first, and I don't want to change it since that would be a breaking API change. Also, the Automerge API functions has the convention that the document is generally the first argument.

@orionz and/or @pvh, could you take a look at this? Especially @orionz as the Rust/wasm backend used to have a getClock function at some point (did it get removed again?). Do you think this is a good API to support for Automerge 1.0 going forward? Here are the docs.

josharian

comment created time in 2 days

delete branch brentkeller/bkcli

delete branch : dependabot/npm_and_yarn/node-fetch-2.6.1

delete time in 3 days

PR closed brentkeller/bkcli

Bump node-fetch from 2.6.0 to 2.6.1 dependencies

Bumps node-fetch from 2.6.0 to 2.6.1. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/bitinn/node-fetch/releases">node-fetch's releases</a>.</em></p> <blockquote> <h2>v2.6.1</h2> <p><strong>This is an important security release. It is strongly recommended to update as soon as possible.</strong></p> <p>See <a href="https://github.com/node-fetch/node-fetch/blob/master/docs/CHANGELOG.md#v261">CHANGELOG</a> for details.</p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/node-fetch/node-fetch/blob/master/docs/CHANGELOG.md">node-fetch's changelog</a>.</em></p> <blockquote> <h2>v2.6.1</h2> <p><strong>This is an important security release. It is strongly recommended to update as soon as possible.</strong></p> <ul> <li>Fix: honor the <code>size</code> option after following a redirect.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/node-fetch/node-fetch/commit/b5e2e41b2b50bf2997720d6125accaf0dd68c0ab"><code>b5e2e41</code></a> update version number</li> <li><a href="https://github.com/node-fetch/node-fetch/commit/2358a6c2563d1730a0cdaccc197c611949f6a334"><code>2358a6c</code></a> Honor the <code>size</code> option after following a redirect and revert data uri support</li> <li><a href="https://github.com/node-fetch/node-fetch/commit/8c197f8982a238b3c345c64b17bfa92e16b4f7c4"><code>8c197f8</code></a> docs: Fix typos and grammatical errors in README.md (<a href="https://github-redirect.dependabot.com/bitinn/node-fetch/issues/686">#686</a>)</li> <li><a href="https://github.com/node-fetch/node-fetch/commit/1e99050f944ac435fce26a9549eadcc2419a968a"><code>1e99050</code></a> fix: Change error message thrown with redirect mode set to error (<a href="https://github-redirect.dependabot.com/bitinn/node-fetch/issues/653">#653</a>)</li> <li><a href="https://github.com/node-fetch/node-fetch/commit/244e6f63d42025465796e3ca4ce813bf2c31fc5b"><code>244e6f6</code></a> docs: Show backers in README</li> <li><a href="https://github.com/node-fetch/node-fetch/commit/6a5d192034a0f438551dffb6d2d8df2c00921d16"><code>6a5d192</code></a> fix: Properly parse meta tag when parameters are reversed (<a href="https://github-redirect.dependabot.com/bitinn/node-fetch/issues/682">#682</a>)</li> <li><a href="https://github.com/node-fetch/node-fetch/commit/47a24a03eb49a49d81b768892aee10074ed54a91"><code>47a24a0</code></a> chore: Add opencollective badge</li> <li><a href="https://github.com/node-fetch/node-fetch/commit/7b136627c537cb24430b0310638c9177a85acee1"><code>7b13662</code></a> chore: Add funding link</li> <li><a href="https://github.com/node-fetch/node-fetch/commit/5535c2ed478d418969ecfd60c16453462de2a53f"><code>5535c2e</code></a> fix: Check for global.fetch before binding it (<a href="https://github-redirect.dependabot.com/bitinn/node-fetch/issues/674">#674</a>)</li> <li><a href="https://github.com/node-fetch/node-fetch/commit/1d5778ad0d910dbd1584fb407a186f5a0bc1ea22"><code>1d5778a</code></a> docs: Add Discord badge</li> <li>Additional commits viewable in <a href="https://github.com/bitinn/node-fetch/compare/v2.6.0...v2.6.1">compare view</a></li> </ul> </details> <details> <summary>Maintainer changes</summary> <p>This version was pushed to npm by <a href="https://www.npmjs.com/~akepinski">akepinski</a>, a new releaser for node-fetch since your current version.</p> </details> <br />

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


<details> <summary>Dependabot commands and options</summary> <br />

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
  • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
  • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
  • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

You can disable automated security fix PRs for this repo from the Security Alerts page.

</details>

+5 -5

1 comment

2 changed files

dependabot[bot]

pr closed time in 3 days

delete branch brentkeller/bkcli

delete branch : dependabot/npm_and_yarn/lodash-4.17.20

delete time in 3 days

PR closed brentkeller/bkcli

Bump lodash from 4.17.15 to 4.17.20 dependencies

Bumps lodash from 4.17.15 to 4.17.20. <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/lodash/lodash/commit/ded9bc66583ed0b4e3b7dc906206d40757b4a90a"><code>ded9bc6</code></a> Bump to v4.17.20.</li> <li><a href="https://github.com/lodash/lodash/commit/63150ef7645ac07961b63a86490f419f356429aa"><code>63150ef</code></a> Documentation fixes.</li> <li><a href="https://github.com/lodash/lodash/commit/00f0f62a979d2f5fa0287c06eae70cf9a62d8794"><code>00f0f62</code></a> test.js: Remove trailing comma.</li> <li><a href="https://github.com/lodash/lodash/commit/846e434c7a5b5692c55ebf5715ed677b70a32389"><code>846e434</code></a> Temporarily use a custom fork of <code>lodash-cli</code>.</li> <li><a href="https://github.com/lodash/lodash/commit/5d046f39cbd27f573914768e3b36eeefcc4f1229"><code>5d046f3</code></a> Re-enable Travis tests on <code>4.17</code> branch.</li> <li><a href="https://github.com/lodash/lodash/commit/aa816b36d402a1ad9385142ce7188f17dae514fd"><code>aa816b3</code></a> Remove <code>/npm-package</code>.</li> <li><a href="https://github.com/lodash/lodash/commit/d7fbc52ee0466a6d248f047b5d5c3e6d1e099056"><code>d7fbc52</code></a> Bump to v4.17.19</li> <li><a href="https://github.com/lodash/lodash/commit/2e1c0f22f425e9c013815b2cd7c2ebd51f49a8d6"><code>2e1c0f2</code></a> Add npm-package</li> <li><a href="https://github.com/lodash/lodash/commit/1b6c282299f4e0271f932b466c67f0f822aa308e"><code>1b6c282</code></a> Bump to v4.17.18</li> <li><a href="https://github.com/lodash/lodash/commit/a370ac81408de2da77a82b3c4b61a01a3b9c2fac"><code>a370ac8</code></a> Bump to v4.17.17</li> <li>Additional commits viewable in <a href="https://github.com/lodash/lodash/compare/4.17.15...4.17.20">compare view</a></li> </ul> </details> <details> <summary>Maintainer changes</summary> <p>This version was pushed to npm by <a href="https://www.npmjs.com/~bnjmnt4n">bnjmnt4n</a>, a new releaser for lodash since your current version.</p> </details> <br />

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


<details> <summary>Dependabot commands and options</summary> <br />

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
  • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
  • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
  • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

You can disable automated security fix PRs for this repo from the Security Alerts page.

</details>

+3 -3

1 comment

1 changed file

dependabot[bot]

pr closed time in 3 days

pull request commentbrentkeller/bkcli

Bump node-fetch from 2.6.0 to 2.6.1

Looks like node-fetch is up-to-date now, so this is no longer needed.

dependabot[bot]

comment created time in 3 days

pull request commentbrentkeller/bkcli

Bump lodash from 4.17.15 to 4.17.20

Looks like lodash is up-to-date now, so this is no longer needed.

dependabot[bot]

comment created time in 3 days

delete branch brentkeller/bkcli

delete branch : dependabot/npm_and_yarn/bl-4.0.3

delete time in 3 days

PR closed brentkeller/bkcli

Bump bl from 4.0.2 to 4.0.3 dependencies

Bumps bl from 4.0.2 to 4.0.3. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/rvagg/bl/releases">bl's releases</a>.</em></p> <blockquote> <h2>v4.0.3</h2> <p>Fix unintialized memory access</p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/rvagg/bl/commit/f659836cc84211cad41b73bad89c78f7f874c626"><code>f659836</code></a> Bumped v4.0.3</li> <li><a href="https://github.com/rvagg/bl/commit/7a4ae7f818a4ceba234f3d186a1ffb3f0a34ad0c"><code>7a4ae7f</code></a> Node v14</li> <li><a href="https://github.com/rvagg/bl/commit/d3e240e3b8ba4048d3c76ef5fb9dd1f8872d3190"><code>d3e240e</code></a> Fix unintialized memory access</li> <li><a href="https://github.com/rvagg/bl/commit/1c590ad49e10a158783ada7cc0662d9e0cc6cc11"><code>1c590ad</code></a> add license MIT tag to package.json (<a href="https://github-redirect.dependabot.com/rvagg/bl/issues/83">#83</a>)</li> <li>See full diff in <a href="https://github.com/rvagg/bl/compare/v4.0.2...v4.0.3">compare view</a></li> </ul> </details> <br />

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


<details> <summary>Dependabot commands and options</summary> <br />

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
  • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
  • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
  • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

You can disable automated security fix PRs for this repo from the Security Alerts page.

</details>

+16 -16

1 comment

1 changed file

dependabot[bot]

pr closed time in 3 days

pull request commentbrentkeller/bkcli

Bump bl from 4.0.2 to 4.0.3

Looks like bl is up-to-date now, so this is no longer needed.

dependabot[bot]

comment created time in 3 days

push eventbrentkeller/bkcli

Brent Keller

commit sha 74b39d75468d8e98d53a27f9ff26aef62508108f

yarn upgrade

view details

Brent Keller

commit sha fdaf160c146a2a56e3e4c033eaa7c5c707eb72f2

Update some packages

view details

push time in 3 days

more