aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornetop://ウィビ <paul@webb.page>2026-06-22 11:35:17 -0700
committernetop://ウィビ <paul@webb.page>2026-06-22 11:35:17 -0700
commite584830b1fb06fde3cdb285556c26e0fb242ea2b (patch)
tree2c675b5ec4b5c2bf19089c41f60f7c2f59d9979a
parent69e84f7f93f4281fb023afdbfaf259c4ddf18d47 (diff)
downloadblog-e584830b1fb06fde3cdb285556c26e0fb242ea2b.tar.gz
blog-e584830b1fb06fde3cdb285556c26e0fb242ea2b.zip
new posts
-rw-r--r--memos/WM-096.txt103
-rw-r--r--memos/WM-097.txt130
-rw-r--r--src/utility/markdown.ts8
-rw-r--r--version.txt2
4 files changed, 239 insertions, 4 deletions
diff --git a/memos/WM-096.txt b/memos/WM-096.txt
new file mode 100644
index 0000000..750e23b
--- /dev/null
+++ b/memos/WM-096.txt
@@ -0,0 +1,103 @@
+
+
+
+
+
+
+
+Document: WM-096 P. Webb
+Category: Life 2026-06-20
+
+ Filoli Photoshoot
+
+Abstract
+
+ My favorite professional pics from the shoot (along with my own)
+
+Body
+
+ Last month my wife saw an open call for models for Filoli[1]. We
+ frequent this flower garden a few times a year so she filled out the
+ form and our family was selected! Filoli's marketing material will
+ feature the Webbs at some point, I'll be sure to update this memo if
+ I see us on physical media.
+
+ The professional photos were shot by Key Lime Photography[2], (the
+ rest are obviously by me).
+
+ 📸[Lakeisha snapping a photo][IMG1]
+
+ 📸[pink roses][IMG2]
+
+ 📸[wispy clouds against a blue sky with greenery below][IMG3]
+
+ 📸[Lakeisha and I watching Ian run][IMG4]
+
+ 📸[Ian walking between Lakeisha and I with the rest of our party mingling][IMG5]
+
+ 📸[Lakeisha posing][IMG6]
+
+ 📸[Persian Onion flower][IMG7]
+
+ 📸[Lakeisha being playful][IMG8]
+
+ 📸[beautiful greenery in the garden][IMG9]
+
+ 📸[Lakeisha smiling at me][IMG10]
+
+ 📸[Ian and a kid looking into a pond as their mothers look on][IMG11]
+
+ 📸[Ian and a kid laughing][IMG12]
+
+ 📸[Ian and a kid running around][IMG13]
+
+ 📸[angled shot of a short shrubbery maze][IMG14]
+
+ 📸[Ian leaping down steps, being chased by a kid][IMG15]
+
+ 📸[me looking pensive, like a model][IMG16]
+
+ Slap a filter on this and it looks like it could be an album cover
+ for some sweet 80s tunes. Too bad I'm a terrible singer.
+
+ 📸[Ian mid-speech][IMG17]
+
+ 📸[cast shot of everyone enjoying being by the pool][IMG18]
+
+ 📸[close-up of me looking at Ian with an amused expression][IMG19]
+
+ I had to get a close-up of this shot. I don't remember what Ian was
+ talking about but I clearly found it quite amusing.
+
+ 📸[Lakeisha glowing in the light of a setting sun][IMG20]
+
+ And there you have it! A day was had. I'm open to more opportunities
+ like this, it was fun. There was a moment in 2021, I think, where my
+ wife and I could've be a part of some competition show but timing was
+ bad. I believe it was a revival of a 90s kids competition show. Not
+ sure if that even aired, now that I think about it. Ah well. 🕸️
+
+References
+
+ [1] <https://filoli.org>
+ [2] <https://keylimephoto.com>
+ [IMG1] <https://cdn.webb.page/blog/2026/wm-096-a.JPG>
+ [IMG2] <https://cdn.webb.page/blog/2026/wm-096-b.JPG>
+ [IMG3] <https://cdn.webb.page/blog/2026/wm-096-c.JPG>
+ [IMG4] <https://cdn.webb.page/blog/2026/wm-096-d.JPG>
+ [IMG5] <https://cdn.webb.page/blog/2026/wm-096-e.JPG>
+ [IMG6] <https://cdn.webb.page/blog/2026/wm-096-f.JPG>
+ [IMG7] <https://cdn.webb.page/blog/2026/wm-096-g.JPG>
+ [IMG8] <https://cdn.webb.page/blog/2026/wm-096-h.JPG>
+ [IMG9] <https://cdn.webb.page/blog/2026/wm-096-i.JPG>
+ [IMG10] <https://cdn.webb.page/blog/2026/wm-096-j.JPG>
+ [IMG11] <https://cdn.webb.page/blog/2026/wm-096-k.JPG>
+ [IMG12] <https://cdn.webb.page/blog/2026/wm-096-l.JPG>
+ [IMG13] <https://cdn.webb.page/blog/2026/wm-096-m.JPG>
+ [IMG14] <https://cdn.webb.page/blog/2026/wm-096-n.JPG>
+ [IMG15] <https://cdn.webb.page/blog/2026/wm-096-o.JPG>
+ [IMG16] <https://cdn.webb.page/blog/2026/wm-096-p.JPG>
+ [IMG17] <https://cdn.webb.page/blog/2026/wm-096-q.JPG>
+ [IMG18] <https://cdn.webb.page/blog/2026/wm-096-r.JPG>
+ [IMG19] <https://cdn.webb.page/blog/2026/wm-096-r1.PNG>
+ [IMG20] <https://cdn.webb.page/blog/2026/wm-096-s.JPG>
diff --git a/memos/WM-097.txt b/memos/WM-097.txt
new file mode 100644
index 0000000..53c1df6
--- /dev/null
+++ b/memos/WM-097.txt
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+Document: WM-097 P. Webb
+Category: Tutorial 2026-06-22
+
+ How to migrate from Gel to Disc
+
+Abstract
+
+ The hardest part is getting your data out of Gel in a useable format,
+ the rest is easy.
+
+Body
+
+ Dumping your Gel database to a format other databases can read
+ requires arcane knowledge but don't fret, I've uncovered the
+ incantations to free your data!
+
+ ```sh
+ gel dump --all --format=dir gel-export
+ ```
+
+ You should see something like:
+
+ ```
+ Connecting to Gel instance 'INSTANCE' at localhost:PORT...
+ Starting dump for database `'DATABASE'`...
+ Finished dump for `'DATABASE'`. Total size: 181.67 KiB
+ ```
+
+ This will create `gel-export` in your current directory. Take note of
+ the instance and database names and the port as you'll need these
+ later. Next, grab the password to your database:
+
+ ```sh
+ gel instance credentials --insecure-dsn -I INSTANCE
+ ```
+
+ You should see something like:
+
+ ```
+ gel:///DATABASE?port=PORT&password=PASSWORD&tls_ca_file=%3C...%3E&tls_security=no_host_verification
+ ```
+
+ Now we can set some variables to make the last bits pseudo-legible.
+
+ ```sh
+ DSN="postgresql://edgedb@localhost:PORT/DATABASE?sslmode=require"
+ ```
+
+ ```sh
+ export PGPASSWORD="PASSWORD"
+ ```
+
+ Perform a raw SQL dump to `gel-export/data.sql`:
+
+ ```sh
+ pg_dump \
+ "$DSN" --data-only --no-owner --no-privileges \
+ > gel-export/data.sql
+ ```
+
+ We create a `.tsv` file first, without any escaping that could mangle
+ the data.
+
+ ```sh
+ psql "$DSN" -At -F $'\t' -c "
+ SELECT table_schema, table_name
+ FROM information_schema.tables
+ WHERE table_schema NOT IN ('information_schema', 'pg_catalog')
+ " > gel-export/tables.tsv
+ ```
+
+ Create our final export directory:
+
+ ```sh
+ mkdir gel-export/data
+ ```
+
+ Finally, we render our `.csv`s:
+
+ ```sh
+ while IFS=$'\t' read -r schema table; do
+ out="${schema}_${table}"
+ psql "$DSN" --csv -c "SELECT * FROM \"$schema\".\"$table\"" > "gel-export/data/$out.csv"
+ done < gel-export/tables.tsv
+ ```
+
+ I'll assume you installed Disc[1] already. Great! You'll need to get
+ it setup with your schema. Run that migration!
+
+ ```sh
+ disc migrate
+ ```
+
+ Next, we'll point Disc at your fresh collection of `.csv`s:
+
+ ```sh
+ disc db import ./gel-export/data
+ ```
+
+ This SHOULD work; it didn't for me because…
+
+ ```
+ ✗ Import failed (transaction rolled back): duplicate key value violates unique constraint "log_pkey"
+ ```
+
+ …and that's irrelevant to me. Ignoring conflicts like this is okay.
+
+ ```sh
+ disc db import ./gel-export/data --on-conflict skip
+ ```
+
+ You'll get an import manifest of what was processed and skipped. For
+ me, it was abstract types and (empty) computed links.
+
+ Run `disc serve` and navigate to your database's `/ui` and you should
+ see populated objects in the Data tab.
+
+ Voila! Now all you gotta do is update your codebase…unfortunately,
+ you've gotta handle that yourself. 🕸️
+
+References
+
+ [1] <https://disc.sh>
diff --git a/src/utility/markdown.ts b/src/utility/markdown.ts
index f78cfee..9d8e514 100644
--- a/src/utility/markdown.ts
+++ b/src/utility/markdown.ts
@@ -83,15 +83,17 @@ export default (input: string): string => {
/*** restore inline code ***/
for (const block in inlineCode) {
- processed = processed.replace(`<!--INLINE:CODE:${block}-->`, `<code>${escapeHtml(inlineCode[block])}</code>`);
+ processed = processed.replace(
+ `<!--INLINE:CODE:${block}-->`,
+ () => `<code>${escapeHtml(inlineCode[block])}</code>`
+ );
}
/*** restore code blocks ***/
for (const block of codeBlocks) {
const langAttr = block.language ? ` data-language="${block.language}"` : "";
const html = `<pre><code${langAttr}>\n${escapeHtml(block.content)}\n\n</code></pre>`;
-
- processed = processed.replace(`<!--CODE:BLOCK:${block.index}-->`, html);
+ processed = processed.replace(`<!--CODE:BLOCK:${block.index}-->`, () => html);
}
// console.log(processed); /*** for troubleshooting ***/
diff --git a/version.txt b/version.txt
index 8ba12c0..368df31 100644
--- a/version.txt
+++ b/version.txt
@@ -1 +1 @@
-2026.06.17 \ No newline at end of file
+2026.06.22 \ No newline at end of file