Thicket data repository for the EEG
at main 14 kB view raw
1{ 2 "id": "https://ryan.freumh.org/2025-02-03.html", 3 "title": "3 Feb 2025", 4 "link": "https://ryan.freumh.org/2025-02-03.html", 5 "updated": "2025-02-03T00:00:00", 6 "published": "2025-02-03T00:00:00", 7 "summary": "<div>\n <span> Previous: <a href=\"2025-01-27.html\">27 Jan 2025</a> </span>\n <span> Next: <a href=\"2025-02-10.html\">10 Feb 2025</a> </span>\n </div>\n \n \n\n <ol>\n<li><p><span>Babel</span></p>\n<p><span>I’ve been focusing on our new package manager to\nrule them all, code name `Babel’, this week.</span></p>\n<ol>\n<li><p><span>PubGrub opam dependency provider</span></p>\n<p><span>I’m making progress so supporting <a href=\"https://opam.ocaml.org/\">Opam</a>’s full feature set with the <a href=\"https://pubgrub-rs-guide.pages.dev/\">Rust implementation of the\nPubGrub</a> version solving algorithm, which we’re aiming to use for a\ncross-ecosystem solver.</span></p>\n<p><span><a href=\"https://github.com/RyanGibb/opam-giga-repository\">Previous\nwork</a> has used the Opam semantics for multiple ecosystems.</span></p>\n<p><span>The PubGrub encoding is quite similar to the\n`HyperRes’ formalism we defined for a minimal subset of functionality\nbetween ecosystems..</span></p>\n<ol>\n<li><p><span><span>X</span> I’ve added\nsupport for the complicated ordering of <a href=\"https://opam.ocaml.org/doc/Manual.html#Version-ordering\">opam\nversions</a> - <a href=\"https://github.com/RyanGibb/pubgrub-opam/commit/7f941e30f5b6ea11c201e667c2aee6984606bb26\">here</a></span></p></li>\n<li><p><span><span>X</span> I’ve added an\nencoding of boolean logic in Opam’s <a href=\"https://opam.ocaml.org/doc/Manual.html#Package-Formulas\">package\nformula</a> - <a href=\"https://github.com/RyanGibb/pubgrub-opam/commit/63f12dd256fac440d0c69a079c324855cbee224c\">here</a></span></p>\n<ul>\n<li>We support version formula with PubGrub’s Range operations (e.g.\nunion, intersection, etc)</li>\n<li>We support package formula with a proxy package for a logical or;\nthe proxy package has two version - “lhs” and “rhs” with appropriate\ndependencies, and we can extract the edges in the resolved dependency\ngraph from this. This is equivalent to our edges clauses in the SAT\nencoding, but using packages themselves to encode it.</li>\n</ul>\n<p><span>An <a href=\"https://github.com/RyanGibb/pubgrub-opam/tree/main/package-formula-repo\">example</a>;</span></p>\n<pre><code>Created index with 5 packages:\n(C, 1.0.0)\n(C, 1.5.0) -&gt; (E: 1.0.0 &lt;= v)\n(B, 1.0.0) -&gt; (E: 1.0.0)\n(B, 1.2.0) -&gt; ((C: ∗) | (E: [ , 1.1.0 [ [ 1.1.0.1, ∞ [))\n(B, 2.0.0) -&gt; (((A: v &lt; 3.0.0) &amp; (E: 1.0.0 &lt;= v)) | (C: ∗))\n(E, 1.0.0)\n(A, 1.0.0) -&gt; ((B: 1.0.0.1 &lt;= v) &amp; (C: v &lt; 1.4.0))\n(A, 1.1.0) -&gt; ((B: 1.0.0.1 &lt;= v) | (C: v &lt; 1.4.0))\n(A, 1.2.0) -&gt; ((B: 5.0.0.1 &lt;= v) | (C: v &lt; 1.4.0))\n(A, 1.3.0) -&gt; ((C: v &lt; 1.4.0) | (B: 1.0.0.1 &lt;= v))\n(A, 2.0.0) -&gt; ((B: 1.2.0.1 &lt;= v) &amp; ((C: ∗) | (D: [ 2.0.0, 2.0.0.1 [ [ 2.5.0, ∞ [)))\n(A, 2.1.0) -&gt; ((B: 2.0.0 &lt;= v) &amp; ((C: v &lt; 2.0.0) | (E: 1.0.0 &lt;= v)))\n(A, 3.0.0) -&gt; (((B: 2.0.0 &lt;= v) &amp; (C: 1.5.0 &lt;= v)) | ((D: 2.0.0 &lt;= v) &amp; (E: 1.0.0)))\n(D, 2.0.0) -&gt; ((E: 2.0.0 &lt;= v) | (C: ∗))\nResolved Dependency Graph:\n(A, 2.0.0) -&gt; (C, 1.5.0), (B, 2.0.0)\n(B, 2.0.0) -&gt; (A, 2.0.0), (E, 1.0.0)\n(E, 1.0.0)\n(C, 1.5.0) -&gt; (E, 1.0.0)\n</code></pre>\n<p><span>where,</span></p>\n<pre><code>name: &quot;A&quot;\nversion: &quot;2.0.0&quot;\ndepends: [\n &quot;B&quot; {&gt; &quot;1.2.0&quot;} &amp; ( &quot;C&quot; | ( &quot;D&quot; {= &quot;2.0.0&quot; &amp; ! (&lt; &quot;2.5.0&quot;)} ) )\n]\n</code></pre></li>\n<li><p><span><span>O</span> support\nvariables as package with Opam <a href=\"https://opam.ocaml.org/doc/Manual.html#Filtered-package-formulas\">filtered\nformula</a></span></p></li>\n</ol></li>\n</ol></li>\n<li><p><span>Next week</span></p>\n<ol>\n<li><p><span><span>O</span> explore error\nmessages with exotic encoding, including opam’s package\nformula</span></p>\n<p><span>this might require a custom error\nprovider</span></p></li>\n<li><p><span><span>O</span> try <a href=\"https://crates.io/crates/pubgrub/0.3.0-alpha.1\">PubGrub 0.3.0\nprerelease</a></span></p>\n<p><span>I think there’s probably a lot of improvements to\nbe had since the last release was 4 years ago.</span></p>\n<ol>\n<li><p><span><span>O</span> it looks like\nwe might be able to manually add conflicts <a href=\"https://github.com/pubgrub-rs/pubgrub/blob/23357967c6473b358ffb7c0092e9c3fc4e4c972b/src/internal/core.rs#L94\"><code>add_incompatibility</code></a></span></p></li>\n</ol></li>\n<li><p><span><span>O</span> solve on the\nopam repository</span></p>\n<p><span>just strip out everything non essential (filtered\nformulas, variables, conflicts, etc) to get something\nworking</span></p></li>\n<li><p><span><span>O</span> a\nDebian/Alpine encoding in PubGrub, which I think should be much simpler\nthan Opam</span></p>\n<p><span>and tie into opam with depexts for cross-ecosystem\nresolutions</span></p>\n<p><span><a href=\"https://github.com/astral-sh/uv\">Uv</a>\nis using the development branch of PubGrub.</span></p></li>\n</ol></li>\n<li><p><span>Could submit a theory paper to SPLASH and a\npractice to SOSP <span><span>idea</span></span></span></p>\n<ul>\n<li>tool solve for these</li>\n<li>tricky because of new problems</li>\n<li>error reporting</li>\n</ul></li>\n<li><p><span>interactive solving with LLMS to NeurIPS <span><span>idea</span></span></span></p>\n<ul>\n<li>install a web server using jdgango</li>\n<li>give environment</li>\n<li>zero day attacks alpine</li>\n<li>translate all ocaml packages to pip</li>\n</ul></li>\n<li><p><span>Eon</span></p>\n<ol>\n<li><p><span>Found a bug in Eon where NS records aren’t\nbeing propigated to the secondary.</span></p>\n<pre><code>$ dig ns freumh.org @freumh.org +short\nns1.freumh.org.\nns1.sirref.org.\n$ dig ns freumh.org @sirref.org +short\nns1.sirref.org.\n</code></pre>\n<p><span>Which means we’re failing <a href=\"https://internet.nl/\">https://internet.nl/</a> with nameservers\nnot reachable with IPv6.</span></p>\n<p><span>This is probably in <a href=\"https://github.com/RyanGibb/eon/blob/5a56fd3173a3f123d99cb674cb28c133e0cfc263/lib/cap/primary.ml#L136\">here</a>.</span></p></li>\n<li><p><span>When an Eon server statically adds a\nresource record it isn’t propigated to the secondary on a\nrestart.</span></p>\n<p><span>Need to look at this.</span></p></li>\n</ol></li>\n<li><p><span>Eilean</span></p>\n<p><span><a href=\"https://github.com/RyanGibb/eilean-nix/commit/5a8727fea2b7099eacfa9f275bf1ee915e0a1044\">Fixed</a>\nmailserver DKIM records resulting from a change in the Eon capability\nupdate CLI</span></p></li>\n<li><p><span>Spatial Name System</span></p>\n<p><span>Agreed to prototype something to provision\nresources from a nameserver on a Raspberry Pi that could be deployed to\nESP32 sensors while Josh continues to hack on the ESP32.</span></p></li>\n</ol>", 8 "content": "<div>\n <span> Previous: <a href=\"2025-01-27.html\">27 Jan 2025</a> </span>\n <span> Next: <a href=\"2025-02-10.html\">10 Feb 2025</a> </span>\n </div>\n \n \n\n <ol>\n<li><p><span>Babel</span></p>\n<p><span>I’ve been focusing on our new package manager to\nrule them all, code name `Babel’, this week.</span></p>\n<ol>\n<li><p><span>PubGrub opam dependency provider</span></p>\n<p><span>I’m making progress so supporting <a href=\"https://opam.ocaml.org/\">Opam</a>’s full feature set with the <a href=\"https://pubgrub-rs-guide.pages.dev/\">Rust implementation of the\nPubGrub</a> version solving algorithm, which we’re aiming to use for a\ncross-ecosystem solver.</span></p>\n<p><span><a href=\"https://github.com/RyanGibb/opam-giga-repository\">Previous\nwork</a> has used the Opam semantics for multiple ecosystems.</span></p>\n<p><span>The PubGrub encoding is quite similar to the\n`HyperRes’ formalism we defined for a minimal subset of functionality\nbetween ecosystems..</span></p>\n<ol>\n<li><p><span><span>X</span> I’ve added\nsupport for the complicated ordering of <a href=\"https://opam.ocaml.org/doc/Manual.html#Version-ordering\">opam\nversions</a> - <a href=\"https://github.com/RyanGibb/pubgrub-opam/commit/7f941e30f5b6ea11c201e667c2aee6984606bb26\">here</a></span></p></li>\n<li><p><span><span>X</span> I’ve added an\nencoding of boolean logic in Opam’s <a href=\"https://opam.ocaml.org/doc/Manual.html#Package-Formulas\">package\nformula</a> - <a href=\"https://github.com/RyanGibb/pubgrub-opam/commit/63f12dd256fac440d0c69a079c324855cbee224c\">here</a></span></p>\n<ul>\n<li>We support version formula with PubGrub’s Range operations (e.g.\nunion, intersection, etc)</li>\n<li>We support package formula with a proxy package for a logical or;\nthe proxy package has two version - “lhs” and “rhs” with appropriate\ndependencies, and we can extract the edges in the resolved dependency\ngraph from this. This is equivalent to our edges clauses in the SAT\nencoding, but using packages themselves to encode it.</li>\n</ul>\n<p><span>An <a href=\"https://github.com/RyanGibb/pubgrub-opam/tree/main/package-formula-repo\">example</a>;</span></p>\n<pre><code>Created index with 5 packages:\n(C, 1.0.0)\n(C, 1.5.0) -&gt; (E: 1.0.0 &lt;= v)\n(B, 1.0.0) -&gt; (E: 1.0.0)\n(B, 1.2.0) -&gt; ((C: ∗) | (E: [ , 1.1.0 [ [ 1.1.0.1, ∞ [))\n(B, 2.0.0) -&gt; (((A: v &lt; 3.0.0) &amp; (E: 1.0.0 &lt;= v)) | (C: ∗))\n(E, 1.0.0)\n(A, 1.0.0) -&gt; ((B: 1.0.0.1 &lt;= v) &amp; (C: v &lt; 1.4.0))\n(A, 1.1.0) -&gt; ((B: 1.0.0.1 &lt;= v) | (C: v &lt; 1.4.0))\n(A, 1.2.0) -&gt; ((B: 5.0.0.1 &lt;= v) | (C: v &lt; 1.4.0))\n(A, 1.3.0) -&gt; ((C: v &lt; 1.4.0) | (B: 1.0.0.1 &lt;= v))\n(A, 2.0.0) -&gt; ((B: 1.2.0.1 &lt;= v) &amp; ((C: ∗) | (D: [ 2.0.0, 2.0.0.1 [ [ 2.5.0, ∞ [)))\n(A, 2.1.0) -&gt; ((B: 2.0.0 &lt;= v) &amp; ((C: v &lt; 2.0.0) | (E: 1.0.0 &lt;= v)))\n(A, 3.0.0) -&gt; (((B: 2.0.0 &lt;= v) &amp; (C: 1.5.0 &lt;= v)) | ((D: 2.0.0 &lt;= v) &amp; (E: 1.0.0)))\n(D, 2.0.0) -&gt; ((E: 2.0.0 &lt;= v) | (C: ∗))\nResolved Dependency Graph:\n(A, 2.0.0) -&gt; (C, 1.5.0), (B, 2.0.0)\n(B, 2.0.0) -&gt; (A, 2.0.0), (E, 1.0.0)\n(E, 1.0.0)\n(C, 1.5.0) -&gt; (E, 1.0.0)\n</code></pre>\n<p><span>where,</span></p>\n<pre><code>name: &quot;A&quot;\nversion: &quot;2.0.0&quot;\ndepends: [\n &quot;B&quot; {&gt; &quot;1.2.0&quot;} &amp; ( &quot;C&quot; | ( &quot;D&quot; {= &quot;2.0.0&quot; &amp; ! (&lt; &quot;2.5.0&quot;)} ) )\n]\n</code></pre></li>\n<li><p><span><span>O</span> support\nvariables as package with Opam <a href=\"https://opam.ocaml.org/doc/Manual.html#Filtered-package-formulas\">filtered\nformula</a></span></p></li>\n</ol></li>\n</ol></li>\n<li><p><span>Next week</span></p>\n<ol>\n<li><p><span><span>O</span> explore error\nmessages with exotic encoding, including opam’s package\nformula</span></p>\n<p><span>this might require a custom error\nprovider</span></p></li>\n<li><p><span><span>O</span> try <a href=\"https://crates.io/crates/pubgrub/0.3.0-alpha.1\">PubGrub 0.3.0\nprerelease</a></span></p>\n<p><span>I think there’s probably a lot of improvements to\nbe had since the last release was 4 years ago.</span></p>\n<ol>\n<li><p><span><span>O</span> it looks like\nwe might be able to manually add conflicts <a href=\"https://github.com/pubgrub-rs/pubgrub/blob/23357967c6473b358ffb7c0092e9c3fc4e4c972b/src/internal/core.rs#L94\"><code>add_incompatibility</code></a></span></p></li>\n</ol></li>\n<li><p><span><span>O</span> solve on the\nopam repository</span></p>\n<p><span>just strip out everything non essential (filtered\nformulas, variables, conflicts, etc) to get something\nworking</span></p></li>\n<li><p><span><span>O</span> a\nDebian/Alpine encoding in PubGrub, which I think should be much simpler\nthan Opam</span></p>\n<p><span>and tie into opam with depexts for cross-ecosystem\nresolutions</span></p>\n<p><span><a href=\"https://github.com/astral-sh/uv\">Uv</a>\nis using the development branch of PubGrub.</span></p></li>\n</ol></li>\n<li><p><span>Could submit a theory paper to SPLASH and a\npractice to SOSP <span><span>idea</span></span></span></p>\n<ul>\n<li>tool solve for these</li>\n<li>tricky because of new problems</li>\n<li>error reporting</li>\n</ul></li>\n<li><p><span>interactive solving with LLMS to NeurIPS <span><span>idea</span></span></span></p>\n<ul>\n<li>install a web server using jdgango</li>\n<li>give environment</li>\n<li>zero day attacks alpine</li>\n<li>translate all ocaml packages to pip</li>\n</ul></li>\n<li><p><span>Eon</span></p>\n<ol>\n<li><p><span>Found a bug in Eon where NS records aren’t\nbeing propigated to the secondary.</span></p>\n<pre><code>$ dig ns freumh.org @freumh.org +short\nns1.freumh.org.\nns1.sirref.org.\n$ dig ns freumh.org @sirref.org +short\nns1.sirref.org.\n</code></pre>\n<p><span>Which means we’re failing <a href=\"https://internet.nl/\">https://internet.nl/</a> with nameservers\nnot reachable with IPv6.</span></p>\n<p><span>This is probably in <a href=\"https://github.com/RyanGibb/eon/blob/5a56fd3173a3f123d99cb674cb28c133e0cfc263/lib/cap/primary.ml#L136\">here</a>.</span></p></li>\n<li><p><span>When an Eon server statically adds a\nresource record it isn’t propigated to the secondary on a\nrestart.</span></p>\n<p><span>Need to look at this.</span></p></li>\n</ol></li>\n<li><p><span>Eilean</span></p>\n<p><span><a href=\"https://github.com/RyanGibb/eilean-nix/commit/5a8727fea2b7099eacfa9f275bf1ee915e0a1044\">Fixed</a>\nmailserver DKIM records resulting from a change in the Eon capability\nupdate CLI</span></p></li>\n<li><p><span>Spatial Name System</span></p>\n<p><span>Agreed to prototype something to provision\nresources from a nameserver on a Raspberry Pi that could be deployed to\nESP32 sensors while Josh continues to hack on the ESP32.</span></p></li>\n</ol>", 9 "content_type": "html", 10 "categories": [], 11 "source": "https://ryan.freumh.org/atom.xml" 12}