]> git.za3k.com Git - blog.git/commitdiff
Fixes
authorZachary Vance <za3k@za3k.com>
Tue, 30 Jul 2024 18:04:46 +0000 (14:04 -0400)
committerZachary Vance <za3k@za3k.com>
Tue, 30 Jul 2024 18:04:46 +0000 (14:04 -0400)
54 files changed:
html2markdown.js
markdown2html.py
package-lock.json
package.json
posts-html/android-backup-on-arch-linux.html
posts-html/backup-android-on-plugin.html
posts-html/installing-email-with-postfix-and-dovecot.html
posts-html/irc.html
posts-html/setting-up-ssl-certificates-using-startssl.html
posts-html/the-double-lives-of-books.html
posts-html/whiteboard-partition.html
posts-html/wip-dead-tree-publishing-2.html
posts-html/wip-dead-tree-publishing.html
posts-md/2020-books.md
posts-md/2021-books.md
posts-md/2022-books.md
posts-md/a-pixel-art.md
posts-md/banh-chung.md
posts-md/board-game-travel-kit.md
posts-md/cardboard-mail-holders.md
posts-md/controlling-a-computercraft-turtle-remotely.md
posts-md/default-twitter-icons.md
posts-md/diy-hard-drive-carrying-case.md
posts-md/diy-keyboards-and-how-keyboards-work.md
posts-md/e-ink-laptop.md
posts-md/hack-a-day-day-04-lashed-table.md
posts-md/hack-a-day-day-06.md
posts-md/hack-a-day-day-2-raytracing.md
posts-md/hack-a-day-day-22-homemade-pcbs.md
posts-md/hack-a-day-hack-a-clock.md
posts-md/irc.md
posts-md/meeple-initiative-tracker.md
posts-md/money-orders.md
posts-md/moreorcs-com.md
posts-md/multi-universe-rpg-toy.md
posts-md/my-todo-list.md
posts-md/painting.md
posts-md/pixel-alphabet.md
posts-md/pixel-art-a-cool-cat.md
posts-md/printable-todo-list.md
posts-md/repulsive-dots.md
posts-md/roasted-chickpeas.md
posts-md/scan-organizer.md
posts-md/steak-tartare-3.md
posts-md/the-double-lives-of-books.md
posts-md/tiny-cute-vampire-bat.md
posts-md/whiteboard-partition.md
posts-md/whoosh.md
posts-md/whsh.md
posts-md/wip-dead-tree-publishing-2.md
posts-md/wip-dead-tree-publishing-3.md
posts-md/wip-dead-tree-publishing-4.md
posts-md/wip-dead-tree-publishing.md
posts-md/zorchpad-keyboard-update.md

index 1584a410791f16c868e39d7a8fd86bcf776835b4..73dbb3791174e1482b80cc433b2f93edcbbc1912 100644 (file)
@@ -6,6 +6,10 @@ function repeat (character, count) {
   return Array(count + 1).join(character)
 }
 
+function cleanAttribute (attribute) {
+  return attribute ? attribute.replace(/(\n+\s*)+/g, '\n') : ''
+}
+
 var myPlugin = {
     pre: function(turndownService) {
       turndownService.addRule('preNoCode', {
@@ -27,11 +31,33 @@ var myPlugin = {
       })
     },
 
-    preserveHTMLMatching: function(turndownService) {
+    imageCaptions: function(turndownService) {
+      turndownService.addRule('altTextIsFigCaption', {
+        filter: 'img',
+        replacement: function (content, node) {
+          var alt = cleanAttribute(node.getAttribute('alt'))
+          if (alt) alt = "alt:" + alt
+          var title = cleanAttribute(node.getAttribute('title'))
+          var titlePart = title ? ' "' + title + '"' : ''
+          var src = node.getAttribute('src') || ''
 
-    },
-}
+          // Look for associated figcaption
+          var figure = node
+          while (figure && figure.nodeName != 'FIGURE') figure = figure.parentElement
+          if (figure) {
+            for (const child of Array.from(figure.children)) {
+              if (child.nodeName == "FIGCAPTION") {
+                alt = "caption:" + child.textContent
+              }
+              child.remove()
+            }
+          }
 
+          return src ? '![' + alt + ']' + '(' + src + titlePart + ')' : ''
+        }
+      })
+    }
+}
 
 // Preview options at https://mixmark-io.github.io/turndown/
 var turndownService = new TurndownService({
@@ -45,9 +71,12 @@ var turndownService = new TurndownService({
 })
 turndownService.use(turndownPluginGfm.tables)
 turndownService.use(myPlugin.pre)
+turndownService.use(myPlugin.imageCaptions)
 turndownService.keep('iframe')
 turndownService.keep('video')
-//turndownService.use(myPlugin.preserveHTMLMatching)
+turndownService.preserve(function(node, options) {
+    return node.nodeName == "FIGURE" && node.classList.contains("wp-block-gallery")
+})
 
 const html = fs.readFileSync(0, "utf-8");
 const markdown = turndownService.turndown(html)
index 69b9fa8b048851e228df6f0f3b1ad53a6f4f3c2f..5b3e6e46ba1df311294945790afc4498b7a31003 100644 (file)
@@ -6,7 +6,25 @@ def post_process(soup):
     for img in soup.find_all("img"):
         figure = soup.new_tag("figure")
         figure['class'] = "wp-block-image"
+
+        caption = None
+        if img['alt'] == "": # No alt-text or caption
+            del img['alt']
+        elif img['alt'] and img['alt'].startswith('alt:'): # Alt-text
+            img['alt'] = img['alt'].removeprefix('alt:')
+        else: # Caption
+            if img['alt'] and img['alt'].startswith('caption:'):
+                img['alt'] = img['alt'].removeprefix('caption:')
+            caption = img['alt']
+
+        if img.parent.name == "a":
+            img = img.parent
         img.wrap(figure)
+        if caption is not None:
+            captionE = soup.new_tag("figcaption")
+            captionE.string = caption
+            figure.append(captionE)
+
 
     for pre in soup.find_all("pre"):
         pre['class'] = "wp-block-code"
@@ -47,7 +65,7 @@ def post_process(soup):
     return soup
 
 def markdown2html(html):
-    html = markdown2.markdown(html, extras=['tables', 'header-ids', 'fenced-code-blocks'])
+    html = markdown2.markdown(html, extras=['tables', 'header-ids', 'fenced-code-blocks', 'markdown-in-html'])
     soup = BeautifulSoup(html, 'html.parser')
     soup = post_process(soup)
     return str(soup) #.prettify()
index 7bea45e2cb44cb7912261bb64a54baabb2a310b4..09319c0289aba76aad0f976d9782ec8c172ad7c4 100644 (file)
@@ -7,7 +7,24 @@
       "dependencies": {
         "joplin-turndown-plugin-gfm": "^1.0.12",
         "puppeteer": "^22.13.0",
-        "turndown": "^7.2.0"
+        "turndown": "file:../turndown"
+      }
+    },
+    "../turndown": {
+      "version": "7.2.0",
+      "license": "MIT",
+      "dependencies": {
+        "@mixmark-io/domino": "^2.2.0"
+      },
+      "devDependencies": {
+        "@rollup/plugin-commonjs": "^19.0.0",
+        "@rollup/plugin-node-resolve": "13.0.0",
+        "@rollup/plugin-replace": "2.4.2",
+        "browserify": "17.0.0",
+        "rewire": "^6.0.0",
+        "rollup": "2.52.3",
+        "standard": "^10.0.3",
+        "turndown-attendant": "0.0.3"
       }
     },
     "node_modules/@babel/code-frame": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@mixmark-io/domino": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@mixmark-io/domino/-/domino-2.2.0.tgz",
-      "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==",
-      "license": "BSD-2-Clause"
-    },
     "node_modules/@puppeteer/browsers": {
       "version": "2.2.3",
       "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.2.3.tgz",
         "node": ">=0.10.0"
       }
     },
-    "node_modules/specificity": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
-      "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==",
-      "license": "MIT",
-      "bin": {
-        "specificity": "bin/specificity"
-      }
-    },
-    "node_modules/split-selector": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/split-selector/-/split-selector-1.0.0.tgz",
-      "integrity": "sha512-9KJjJyHL7zH4xSCbv+SPmhMfPujwSSQBhVa0DGcI0hS30veSSi7hYeXNvTZ8orrtw5/25aoHz43S910IpjRWCQ==",
-      "license": "MIT"
-    },
     "node_modules/sprintf-js": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
       "license": "0BSD"
     },
     "node_modules/turndown": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.2.0.tgz",
-      "integrity": "sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==",
-      "license": "MIT",
-      "dependencies": {
-        "@mixmark-io/domino": "^2.2.0"
-      }
+      "resolved": "../turndown",
+      "link": true
     },
     "node_modules/unbzip2-stream": {
       "version": "1.4.3",
       "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==",
       "license": "MIT"
     },
-    "node_modules/visual-html": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/visual-html/-/visual-html-2.1.2.tgz",
-      "integrity": "sha512-QkG28tVW5rRI7ZTz/6jt+hhQlFDaG5OOR5TbnHMKTAhaRx/ZxICJ4SH+/gtacIh8kvaiK0EUSOsQuKG9Nh/lLQ==",
-      "license": "MIT",
-      "dependencies": {
-        "specificity": "^0.4.1",
-        "split-selector": "^1.0.0"
-      }
-    },
     "node_modules/wrap-ansi": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
index 77958dd19a6acba58f8b1ed3ba57cb659ab532e8..c23e4ee100cffba002db82c01dfe9a1d057b00c8 100644 (file)
@@ -2,6 +2,6 @@
   "dependencies": {
     "joplin-turndown-plugin-gfm": "^1.0.12",
     "puppeteer": "^22.13.0",
-    "turndown": "^7.2.0"
+    "turndown": "file:../turndown"
   }
 }
index 2c2cb09f1d7e50d8bd00eeb4b207bd28b3e3f6ef..2f4f4df32e0e1f863102e166a1a36bad63024937 100644 (file)
@@ -35,8 +35,3 @@ wordpress_slug: android-backup-on-arch-linux
 </div>
 
 <!-- comments -->
-<ol class="commentlist">
-<li class="post pingback">
-<p>Pingback: <a class="url" href="https://blog.za3k.com/backup-android-on-plugin/" rel="ugc">Backup android on plugin | Optimal Prime</a></p>
-</li><!-- #comment-## -->
-</ol>
\ No newline at end of file
index deb630485a925ac129711b6a9d3cf7ced49e651c..01f23dc1578a7c9438b18ddc1c5f0ab89bcb623f 100644 (file)
@@ -76,11 +76,3 @@ fusermount -u /media/android
 </div>
 
 <!-- comments -->
-<ol class="commentlist">
-<li class="post pingback">
-<p>Pingback: <a class="url" href="https://blog.za3k.com/android-backup-on-arch-linux/" rel="ugc">Android backup on arch linux | Optimal Prime</a></p>
-</li><!-- #comment-## -->
-<li class="post pingback">
-<p>Pingback: <a class="url" href="https://blog.za3k.com/year-in-review/" rel="ugc">Year in Review | Optimal Prime</a></p>
-</li><!-- #comment-## -->
-</ol>
\ No newline at end of file
index 8b408b17cb9f1dd9472912cc4d5fc97d25975e69..ff64e1d0fb62f843a91ce721b7daf9388f498d4e 100644 (file)
@@ -338,9 +338,7 @@ non_smtpd_milters = inet:localhost:12345
 
 <!-- comments -->
 <ol class="commentlist">
-<li class="post pingback">
-<p>Pingback: <a class="url" href="https://blog.za3k.com/mail-filtering-with-dovecot/" rel="ugc">Mail filtering with Dovecot - Optimal Prime</a></p>
-</li><!-- #comment-## -->
+<!-- #comment-## -->
 <li class="comment even thread-even depth-1" id="li-comment-2842">
 <div id="comment-2842">
 <div class="comment-author vcard">
index b599b435471e51f7076806a495727f099e4bccbd..d5aa33f3620772dd49dbc4a654296024dcae8794 100644 (file)
@@ -31,8 +31,3 @@ wordpress_slug: irc
 </div>
 
 <!-- comments -->
-<ol class="commentlist">
-<li class="post pingback">
-<p>Pingback: <a class="url" href="https://blog.za3k.com/year-in-review/" rel="ugc">Year in Review | Optimal Prime</a></p>
-</li><!-- #comment-## -->
-</ol>
\ No newline at end of file
index bb6c87e6abe6f149464f78fe51f9cfb1750bcae5..36b186c91e3ad27ff59a5d78cce8a02719592d29 100644 (file)
@@ -46,8 +46,3 @@ chmod 700 ${DOMAIN}.full.pem</pre>
 </div>
 
 <!-- comments -->
-<ol class="commentlist">
-<li class="post pingback">
-<p>Pingback: <a class="url" href="https://blog.za3k.com/installing-email-with-postfix-and-dovecot/" rel="ugc">Installing email with Postfix and Dovecot (with Postgres) - Optimal Prime</a></p>
-</li><!-- #comment-## -->
-</ol>
\ No newline at end of file
index 1a07d9c929fcb95a06631df1c763d90ae9c30205..00293e76385e68155d5189a85884b5918c0ed566 100644 (file)
@@ -36,8 +36,3 @@ wordpress_slug: the-double-lives-of-books
 </div>
 
 <!-- comments -->
-<ol class="commentlist">
-<li class="post pingback">
-<p>Pingback: <a class="url" href="https://blog.za3k.com/paper-archival/" rel="ugc">Paper archival | Optimal Prime</a></p>
-</li><!-- #comment-## -->
-</ol>
\ No newline at end of file
index 178d8ff3fdd0a5769b1340a8a14ea98356f8660f..82d2a7af556ad29151660be77a17e0c4bd482ce7 100644 (file)
@@ -24,8 +24,3 @@ wordpress_slug: whiteboard-partition
 </div>
 
 <!-- comments -->
-<ol class="commentlist">
-<li class="post pingback">
-<p>Pingback: <a class="url" href="https://blog.za3k.com/year-in-review/" rel="ugc">Year in Review | Optimal Prime</a></p>
-</li><!-- #comment-## -->
-</ol>
\ No newline at end of file
index 4cf4bd3c123b5129f725d462ed9b63c77e7b9000..1c02ffc3b8ac9fcac99c1551e3accb9fd90d2d4f 100644 (file)
@@ -24,8 +24,3 @@ wordpress_slug: wip-dead-tree-publishing-2
 </div>
 
 <!-- comments -->
-<ol class="commentlist">
-<li class="post pingback">
-<p>Pingback: <a class="url" href="https://blog.za3k.com/wip-dead-tree-publishing-3/" rel="ugc">WIP: Dead Tree Publishing 3 | Optimal Prime</a></p>
-</li><!-- #comment-## -->
-</ol>
\ No newline at end of file
index bcd3e7222623a966f80c28d84fc28d87ea5ea7a3..f31b821baea2c068589394c664c6d5ad15b3295c 100644 (file)
@@ -29,8 +29,3 @@ wordpress_slug: wip-dead-tree-publishing
 </div>
 
 <!-- comments -->
-<ol class="commentlist">
-<li class="post pingback">
-<p>Pingback: <a class="url" href="https://blog.za3k.com/wip-dead-tree-publishing-2/" rel="ugc">WIP: Dead Tree Publishing 2 | Optimal Prime</a></p>
-</li><!-- #comment-## -->
-</ol>
\ No newline at end of file
index 43fde3e187d32c2bbfb594ea38b6427c1dee3e05..9dcf639efd91c1095b6b68fcdec651c2ac960b98 100644 (file)
@@ -54,8 +54,8 @@ House of Earth and Blood by Sarah Maas
 Ithenalin’s Restoration by Lawrence Watt-Evans  
 Lament by Maggie Stiefvater  
 Legacy of the Fallen by Luke Chmilenko p1-316  
-**[Lone Wolf](https://www.projectaon.org/en/Main/Books) / Kai adventure series 1-5, magnakai 1, by Joe Dever  
-**Magic for Liars by Sarah Gailey  
+**[Lone Wolf](https://www.projectaon.org/en/Main/Books) / Kai adventure series 1-5, magnakai 1, by Joe Dever**  
+Magic for Liars by Sarah Gailey  
 Magician by Raymond Feist  
 Magicians by Lev Grossman  
 Making Money by Terry Pratchett  
@@ -85,10 +85,10 @@ Skyward by Brandon Sanderson
 Snowspelled by Stephanie Burges  
 Spellmonger by Terry Mancour, p1-165  
 Starfish by Peter Watts  
-**Stone Unturned by Lawrence Watt-Evans  
-**Storm Glass by Jeff Wheeler  
-**Sufficiently Advanced Magic by Andrew Rowe  
-**The Alien’s Lover by Zoey Draven  
+**Stone Unturned by Lawrence Watt-Evans**  
+Storm Glass by Jeff Wheeler  
+**Sufficiently Advanced Magic by Andrew Rowe**  
+The Alien’s Lover by Zoey Draven  
 The Archived by Victoria Schwab  
 The Atrocity Archive by Charles Stross  
 The Blood of a Dragon by Lawrence Watt-Evans  
@@ -97,8 +97,8 @@ The Collapsing Empire by John Scalzi
 The Diamond Age by Neal Stephenson  
 The Fractured World by David Aries  
 The Goblin Emperor by Katherine Addison  
-**The Library at Mount Char by Scott Hawkins  
-**The Magic Goes Away by Larry Niven  
+**The Library at Mount Char by Scott Hawkins**  
+The Magic Goes Away by Larry Niven  
 The Maker of Universes by Philip Jose Farmer  
 The Misenchanted Sword by Lawrence Watt-Evans  
 The Mysterious Study of Doctor Sex by Tamsyn Muir  
@@ -140,13 +140,13 @@ Forrest Mim’s Engineer’s Notebook
 Forrest Mim’s Mini Notebook  
 Intel’s x86-64 manual  
 Introduction to Analysis by Maxwell Rosenlicht  
-**[Kademelia](https://www.researchgate.net/publication/2492563_Kademlia_A_Peer-to-peer_Information_System_Based_on_the_XOR_Metric) by Peter Maymounkov  
-**[kleiman v wright](https://library.za3k.com/law%20documents/kleiman%20v%20wright%20-%20austrialian%20taxation%20office%20findings.pdf) australian tax document  
+**[Kademelia](https://www.researchgate.net/publication/2492563_Kademlia_A_Peer-to-peer_Information_System_Based_on_the_XOR_Metric) by Peter Maymounkov**  
+[kleiman v wright](https://library.za3k.com/law%20documents/kleiman%20v%20wright%20-%20austrialian%20taxation%20office%20findings.pdf) australian tax document  
 Incremental String Searching by Bertrand Meyer (KNP algorithm)  
 Rules to One Night Ultimate Werewolf  
 The Art of Computer Programming, v1, v3 by Donald Knuth (parts)  
 The Pragmatic Programmer  
 The Rust Programming Language  
-**[There’s Plenty of Room at the Bottom](https://web.pa.msu.edu/people/yang/RFeynman_plentySpace.pdf) by Richard Feynman  
-**Total Money Makeover by Dave Ramsey  
+**[There’s Plenty of Room at the Bottom](https://web.pa.msu.edu/people/yang/RFeynman_plentySpace.pdf) by Richard Feynman**  
+Total Money Makeover by Dave Ramsey  
 W65025 manual (6502 clone)
index 4bcfbb0b419832c1a2d272dd5301c68240546ed7..3a588e7d55d73e11b630cb420bc4810c410529e5 100644 (file)
@@ -61,8 +61,8 @@ Queen of Blood by Sarah Beth Durst
 Vita Nostra by Maryna and Serhiy Dyachenko  
 How Rory Thorne Destroyed the Multiverse by K. Eason  
 Malazan (Malazan 1) by Steven Erikson  
-**Daughter of the Empire by Raymond Feist and Janny Wurts  
-**Mistress of the Empire by Raymond Feist and Janny Wurts  
+**Daughter of the Empire by Raymond Feist and Janny Wurts**  
+Mistress of the Empire by Raymond Feist and Janny Wurts  
 Servant of the Empire by Raymond Feist and Janny Wurts  
 Dragon’s Egg (Cheela 1) by Robert L Forward  
 **[Mother of Learning](https://www.royalroad.com/fiction/21220/mother-of-learning) by Domagoj Kurmaic/nobody103**  
@@ -132,8 +132,8 @@ Wintersteel (Cradle 8) by Will Wight
 Bloodlines (Cradle 9) by Will Wight  
 Reaper (Cradle 10) by Will Wight  
 The Crimson Vault (Travelers Gate 2) by Will Wight  
-\***Dinosaurs by Walter Jon Williams  
-**Blind Lake by Robert Charles Wilson  
+\***Dinosaurs by Walter Jon Williams**  
+Blind Lake by Robert Charles Wilson  
 Thousand Li by Tao Wong  
 Thousand Li 2 by Tao Wong  
 Thousand Li 3 by Tao Wong  
index 3748f402b6a96abbb173cf338feb7a7d7826c056..141fb6d660f42c4c68595d996d827a0a8bbf9274 100644 (file)
@@ -36,8 +36,8 @@ Art of the Adept 3: Scholar of Magic by Michael G Manning
 Aspects by John M Ford  
 Aurora by Kim Stanley Robinson  
 Aurora Rising by Amie Kaufman  
-**Bastion (Immortal Great Souls 1) by Phil Tucker  
-**Children of Time by Adrian Tchaikovsky  
+**Bastion (Immortal Great Souls 1) by Phil Tucker**  
+Children of Time by Adrian Tchaikovsky  
 Citadel: Training in Necessity by Unillustrated  
 City of Broken Magic by Mirah Bolender  
 Cradle 11: Dreadgod by Will Wight  
@@ -49,8 +49,8 @@ Genius by Leopoldo Gout
 Good Omens by Neil Gaiman and Terry Pratchett  
 Grand Game by Tom Elliot (LitRPG)  
 **Project Hail Mary by Andy Weir  
-Head-on by John Scalzi  
-**He Who Fights with Monsters 1 by Shirtaloon  
+Head-on by John Scalzi**  
+He Who Fights with Monsters 1 by Shirtaloon  
 He Who Fights with Monsters 2 by Shirtaloon  
 He Who Fights with Monsters 3 by Shirtaloon  
 He Who Fights with Monsters 4 by Shirtaloon  
@@ -61,8 +61,8 @@ In Other Lands by Sarah Rees
 Insane City by Dave Barry  
 Iron Prince by Bryce O’Conner and Luke Chmilenko  
 Isolate (Grand Illusion 1) by L E Modesitt Jr  
-**[The Kevin Jenkins Experience](https://deathworlders.com/books/deathworlders/chapter-00-kevin-jenkins-experience/) by Hambone  
-**Kusuriya no Hitorigoto / Alchemist’s Journal by Natsu Hyuuga et al  
+**[The Kevin Jenkins Experience](https://deathworlders.com/books/deathworlders/chapter-00-kevin-jenkins-experience/) by Hambone**  
+Kusuriya no Hitorigoto / Alchemist’s Journal by Natsu Hyuuga et al  
 The Left-handed Booksellers of London by Garth Nix  
 Lock In by John Scalzi  
 Mage’s Blood by David Hair  
@@ -74,8 +74,8 @@ Master Li and Number Ten Ox 3: Eight Skilled Gentlemen by Barry Hughart
 Mazer in Prison by Orson Scot Card  
 Memory of Earth by Orson Scott Card  
 Memory of Earth 2: Call of Earth by Orson Scott Card  
-**Millenial Mage by J L Mullins  
-**Neverworld Wake by Marisha Pessl  
+**Millenial Mage by J L Mullins**  
+Neverworld Wake by Marisha Pessl  
 Orc on the Wild Side by Tom Holt  
 Pact by wildbow  
 Penric’s Progress by Louis McMaster Bujold  
@@ -107,8 +107,8 @@ Soulmage by meowcats734
 Starsight by Brandon Sanderson  
 Story of My Life by Hellen Keller  
 Strange and Stubborn Endurance by Foz Meadows  
-A **Succession of Bad Days by Graydon Saunders  
-**The Starless Sea by Eric Morgenstern  
+A **Succession of Bad Days by Graydon Saunders**  
+The Starless Sea by Eric Morgenstern  
 Termination Shock by Neal Stephenson  
 The Consuming Fire by John Scalzi  
 The Every by Dave Eggers  
index fdeb52df17399f07562afde59958bb57c3993818..ea3910fad517ce30c4efbcc608d617d40875c2a2 100644 (file)
@@ -15,4 +15,4 @@ updated: 2015-01-18 17:13:15-07:00
 wordpress_id: 101
 wordpress_slug: a-pixel-art
 ---
-[![A ninja turtle](https://blog.za3k.com/wp-content/uploads/2015/01/Screen-Shot-2015-01-13-at-11.12.20-AM.png)](https://blog.za3k.com/wp-content/uploads/2015/01/Screen-Shot-2015-01-13-at-11.12.20-AM.png)
+[![alt:A ninja turtle](https://blog.za3k.com/wp-content/uploads/2015/01/Screen-Shot-2015-01-13-at-11.12.20-AM.png)](https://blog.za3k.com/wp-content/uploads/2015/01/Screen-Shot-2015-01-13-at-11.12.20-AM.png)
index 91c8bf68746ffa26da3ab3982709ddc2ce643e9d..e4f81f3e9366bd2fe6d78f5fe6b58968a4ab7849 100644 (file)
@@ -19,12 +19,16 @@ I followed the recipe from “[Enjoy a simple life](https://enjoyasimplelife.blo
 
 [![](https://blog.za3k.com/wp-content/uploads/2024/02/fork-crop-1024x808.jpg)](https://blog.za3k.com/wp-content/uploads/2024/02/fork-crop.jpg)
 
+<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex" markdown="1">
+
 [![](https://blog.za3k.com/wp-content/uploads/2024/02/foil-crop-1024x826.jpg)](https://blog.za3k.com/wp-content/uploads/2024/02/foil-crop.jpg)
 
 [![](https://blog.za3k.com/wp-content/uploads/2024/02/leaves-crop-1004x1024.jpg)](https://blog.za3k.com/wp-content/uploads/2024/02/leaves-crop.jpg)
 
 [![](https://blog.za3k.com/wp-content/uploads/2024/02/unwrapped-crop-1024x851.jpg)](https://blog.za3k.com/wp-content/uploads/2024/02/unwrapped-crop.jpg)
 
+</figure>
+
 Like a bread, this recipe takes a fair bit of time. I would start in the morning.
 
 1.  Soak rice and mung beans overnight. Marinate seitan or meat.
index bb2a160dcb7c77d3ab881c1a18d573c0494055e4..c4fee51044c245a582b51f0aef93f6c2ebe1bcf5 100644 (file)
@@ -15,16 +15,10 @@ wordpress_slug: board-game-travel-kit
 ---
 I condensed some of card games into one box:
 
-[![](https://blog.za3k.com/wp-content/uploads/2023/08/cards_open-1024x710.jpg)](https://blog.za3k.com/wp-content/uploads/2023/08/cards_open-scaled.jpg)
-
-Left to right: Doomlings, Star Realms, The Mind, Chrononauts, FitzIt, Are you the traitor?, Are you a werewolf?, Hanabi, Set, Icehouse/Zendo rules, regular playing cards
+[![caption:Left to right: Doomlings, Star Realms, The Mind, Chrononauts, FitzIt, Are you the traitor?, Are you a werewolf?, Hanabi, Set, Icehouse/Zendo rules, regular playing cards](https://blog.za3k.com/wp-content/uploads/2023/08/cards_open-1024x710.jpg)](https://blog.za3k.com/wp-content/uploads/2023/08/cards_open-scaled.jpg)
 
 I’ve noticed that board game boxes tend to be a little big. I combined five into one box:
 
-[![](https://blog.za3k.com/wp-content/uploads/2023/08/box_open-1024x834.jpg)](https://blog.za3k.com/wp-content/uploads/2023/08/box_open-scaled.jpg)
-
-Azul, Settlers of Catan, Clank, Concept, Nuclear War
-
-[![](https://blog.za3k.com/wp-content/uploads/2023/08/both_closed-1024x843.jpg)](https://blog.za3k.com/wp-content/uploads/2023/08/both_closed.jpg)
+[![caption:Azul, Settlers of Catan, Clank, Concept, Nuclear War](https://blog.za3k.com/wp-content/uploads/2023/08/box_open-1024x834.jpg)](https://blog.za3k.com/wp-content/uploads/2023/08/box_open-scaled.jpg)
 
-This is “portable” if you have a car trunk, maybe! It’s heavy as heck.
+[![caption:This is “portable” if you have a car trunk, maybe! It’s heavy as heck.](https://blog.za3k.com/wp-content/uploads/2023/08/both_closed-1024x843.jpg)](https://blog.za3k.com/wp-content/uploads/2023/08/both_closed.jpg)
index 137638413ac7f7b98bdd643f6ffa86aaebe3d759..e7d19d444298fa87b4f5a5266ff370bc0c70a49b 100644 (file)
@@ -18,7 +18,7 @@ wordpress_slug: cardboard-mail-holders
 ---
 Our house has seven people, so today I made some mail holders to put on our doors.
 
-[![cardboard_near0.5](https://blog.za3k.com/wp-content/uploads/2015/09/cardboard_near0.5-1024x768.jpg)](https://blog.za3k.com/wp-content/uploads/2015/09/cardboard_near0.5.jpg)
+[![alt:cardboard_near0.5](https://blog.za3k.com/wp-content/uploads/2015/09/cardboard_near0.5-1024x768.jpg)](https://blog.za3k.com/wp-content/uploads/2015/09/cardboard_near0.5.jpg)
 
 I basically had some long cardboard boxes, and cut them in half. Then I added new ends and separators in the middle.
 
index d3d007e62d574e0420ede0aca75707665d98444b..21abf1f4f4c76372034e8e6d8883c338acca47c1 100644 (file)
@@ -14,7 +14,7 @@ updated: 2015-11-29 23:04:07-07:00
 wordpress_id: 313
 wordpress_slug: controlling-a-computercraft-turtle-remotely
 ---
-[![Screen Shot 2015-10-18 at 7.16.59 PM](https://blog.za3k.com/wp-content/uploads/2015/10/Screen-Shot-2015-10-18-at-7.16.59-PM-1024x582.png)](https://blog.za3k.com/wp-content/uploads/2015/10/Screen-Shot-2015-10-18-at-7.16.59-PM.png)[![Screen Shot 2015-10-18 at 7.17.30 PM](https://blog.za3k.com/wp-content/uploads/2015/10/Screen-Shot-2015-10-18-at-7.17.30-PM-300x197.png)](https://blog.za3k.com/wp-content/uploads/2015/10/Screen-Shot-2015-10-18-at-7.17.30-PM.png)
+[![alt:Screen Shot 2015-10-18 at 7.16.59 PM](https://blog.za3k.com/wp-content/uploads/2015/10/Screen-Shot-2015-10-18-at-7.16.59-PM-1024x582.png)](https://blog.za3k.com/wp-content/uploads/2015/10/Screen-Shot-2015-10-18-at-7.16.59-PM.png)[![alt:Screen Shot 2015-10-18 at 7.17.30 PM](https://blog.za3k.com/wp-content/uploads/2015/10/Screen-Shot-2015-10-18-at-7.17.30-PM-300x197.png)](https://blog.za3k.com/wp-content/uploads/2015/10/Screen-Shot-2015-10-18-at-7.17.30-PM.png)
 
 1.  Install Redis: [https://www.digitalocean.com/community/tutorials/how-to-install-and-use-redis](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-redis)
 2.  Install [Webdis  
index ac9860d937b5e898e46b0c8bffa649d7556706b9..956f8e4f007cdd0e3a7b0a594615339dcfce101b 100644 (file)
@@ -17,7 +17,7 @@ wordpress_slug: default-twitter-icons
 ---
 The default twitter icon is an egg. There are six available. One is chosen at random for each new user.
 
-[![default_profile_1_bigger](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_1_bigger.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_1_bigger.png) [![default_profile_2_bigger](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_2_bigger.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_2_bigger.png) [![default_profile_3_bigger](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_3_bigger.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_3_bigger.png) [![default_profile_4_bigger](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_4_bigger.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_4_bigger.png) [![default_profile_5_bigger](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_5_bigger.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_5_bigger.png) [![default_profile_6_bigger](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_6_bigger.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_6_bigger.png)
+[![alt:default_profile_1_bigger](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_1_bigger.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_1_bigger.png) [![alt:default_profile_2_bigger](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_2_bigger.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_2_bigger.png) [![alt:default_profile_3_bigger](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_3_bigger.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_3_bigger.png) [![alt:default_profile_4_bigger](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_4_bigger.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_4_bigger.png) [![alt:default_profile_5_bigger](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_5_bigger.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_5_bigger.png) [![alt:default_profile_6_bigger](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_6_bigger.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_6_bigger.png)
 
 Hex colors for the six icons:
 
@@ -30,4 +30,4 @@ Hex colors for the six icons:
 
 Large versions of those icons:
 
-[![default_profile_1](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_1-300x300.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_1.png) [![default_profile_2](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_2-300x300.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_2.png) [![default_profile_3](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_3-300x300.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_3.png) [![default_profile_4](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_4-300x300.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_4.png) [![default_profile_5](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_5-300x300.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_5.png) [![default_profile_6](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_6-300x300.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_6.png)
+[![alt:default_profile_1](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_1-300x300.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_1.png) [![alt:default_profile_2](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_2-300x300.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_2.png) [![alt:default_profile_3](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_3-300x300.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_3.png) [![alt:default_profile_4](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_4-300x300.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_4.png) [![alt:default_profile_5](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_5-300x300.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_5.png) [![alt:default_profile_6](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_6-300x300.png)](https://blog.za3k.com/wp-content/uploads/2015/03/default_profile_6.png)
index c5b9a48fda195e4a4e6eae86c28d7800d5b8045e..4664ef911ec3392c826c11c87fe30129ad8d43e4 100644 (file)
@@ -21,8 +21,8 @@ wordpress_slug: diy-hard-drive-carrying-case
 ---
 Today’s project was a hard drive carrying case. I wanted something to securely store hard drives. When I looked around on ebay and amazon, I saw some [nice cases](https://www.amazon.com/gp/product/B007OXK0YM/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&tag=za3k-20&camp=1789&creative=9325&linkCode=as2&creativeASIN=B007OXK0YM&linkId=350884a6d81cab8bc2fd02af3ba9ce42) and some crappy plastic molded ones. Even the terrible ones were at least $50, so I made my own.
 
-[![HDD Carrying Case Exerior](https://blog.za3k.com/wp-content/uploads/2017/07/1.jpg)](https://blog.za3k.com/wp-content/uploads/2017/07/1.jpg)
+[![alt:HDD Carrying Case Exerior](https://blog.za3k.com/wp-content/uploads/2017/07/1.jpg)](https://blog.za3k.com/wp-content/uploads/2017/07/1.jpg)
 
 I bought a used ammo case at the rather excellent local army surplus store. Then I padded all sides. I had spare [EVA foam](https://en.wikipedia.org/wiki/Ethylene-vinyl_acetate) “puzzle piece” style mats from a gym setup lying around. I cut out the pieces with scissors. That’s it.  I was expecting more steps, but nothing needed glued in place. I was planning on adding inserts for the empty slots, but it seems secure enough. If you’re making one, you could also glue the top onto the lid, so you don’t have to take it out manually.
 
-[![HDD Case Interior](https://blog.za3k.com/wp-content/uploads/2017/07/2.v01.jpg)](https://blog.za3k.com/wp-content/uploads/2017/07/2.v01.jpg)
+[![alt:HDD Case Interior](https://blog.za3k.com/wp-content/uploads/2017/07/2.v01.jpg)](https://blog.za3k.com/wp-content/uploads/2017/07/2.v01.jpg)
index 71214f4bcb95e9818f6bf1b250b5d5e98a86697c..4c49ea386261b2b9d87bec19e0522f16930f8c8c 100644 (file)
@@ -18,7 +18,7 @@ I’ve been pondering simple input methods for microcontrollers. One obvious ide
 
 Let’s look inside a commercial keyboard, and see if we can hook up to it:
 
-[![a photograph of the interior of a commercial keyboard. there is a PCB, with two layers of flexible conductor on top, all clamped down](https://blog.za3k.com/wp-content/uploads/2023/06/commercial-1024x549.jpg)](https://blog.za3k.com/wp-content/uploads/2023/06/commercial-scaled.jpg)
+[![alt:a photograph of the interior of a commercial keyboard. there is a PCB, with two layers of flexible conductor on top, all clamped down](https://blog.za3k.com/wp-content/uploads/2023/06/commercial-1024x549.jpg)](https://blog.za3k.com/wp-content/uploads/2023/06/commercial-scaled.jpg)
 
 Yikes. What’s going on? Well, let’s make our own little keyboard, and explore what’s going on. We’ll build it in three layers, or “index cards”:
 
@@ -40,13 +40,11 @@ The final keyboard has 6 x 3 = 18 “keys”. We write the hex digits plus a cou
 
 If I attach alligator clips to the second horizontal screw terminal, and fourth vertical screw terminals, and wire a battery and buzzer with the terminals, I get a connection beep only when I press the key “A”:
 
-[![Two terminals with alligator clips attached to row and column terminals, and a screwdriver pointing at the "A" key addressed.](https://blog.za3k.com/wp-content/uploads/2023/06/address-1024x622.jpg)](https://blog.za3k.com/wp-content/uploads/2023/06/address-scaled.jpg)
+[![alt:Two terminals with alligator clips attached to row and column terminals, and a screwdriver pointing at the "A" key addressed.](https://blog.za3k.com/wp-content/uploads/2023/06/address-1024x622.jpg)](https://blog.za3k.com/wp-content/uploads/2023/06/address-scaled.jpg)
 
 In a real computer, we obviously can’t just move alligator clips around. Instead, we attach wires to all 9 posts–three outputs wires for the horizontal lines, and six inputs for the vertical lines. We output a signal on the first horizontal line, and see if we can read it from any of the six vertical lines inputs. Then we output a signal on the second horizontal line, and see if we can read it, and so on for the third. Assuming only one key is pressed (or none), we can identify the key. This “scanning” process could be done thousands of times a second, rapidly enough that it can’t miss our slowpoke human fingers.
 
-[![Schematic of a keyboard, provided by Kragen](https://blog.za3k.com/wp-content/uploads/2023/06/schematic-1024x414.png)](http://falstad.com/circuit/circuitjs.html?ctz=CQAgjCAMB0l3BWK0AckDMYwE4As3sA2SQgdgCYFsQFIaRd0aBTAWiwCgBncQ8bciEK4Q5XHToQALgCcArs24gi-QWFwixE8CFkKllPjkHpIm8VEt7FPMKSMDRY0Rcm75NhmAeDcwl9rSHkro6D4g6Cjmge76PKF8hhFREWaWQXFeiQh8fiKmIm7WSnbZic4F6bGeSUmVlUXBPCpJ6vlpjZneojlC7YU6xfFh4OQoySKlVUNZo+N54PbTTYtGY06TS501vWDrlVPbSip7422ry11r4-6Hg8EA7rxzytdQHE8n61On708-61a60gHx6bwSLxBTwhv1w3V+UOexleqj+KORP0ciMxglaWNBeJMI2RiJhjjh4URFLBERGSVJdN6tV6iOZRiW9NBUySLRZoN5RjKaP8Wj6qUKXI04vAUtF2NlFnOhwJzm5zjlKuiG2lpLS9TSGuhBosBy2oMimz4FoCaOtoutDVBCymC0NDBFFgWjqetyWHokHAASmL-P50IJtBYkNoYAgODIQyJbnt0vBEcnBL6+PLJimlWaE+dblKsBHwGmgzKk5MpeHLHQo-XkHGnuRVSm25b3gnO2Le6XU-BK72RRUyw26NH69AW9KB6bs-HpWG0gPJBXg5UV-lxwxJ03Y+aUvPjwWJmLrWvy0PNykwyk65H9zGZ06M+6uyCEwt-M6U+ubw-MUvV3RsX1ndg3nhYFQUg1F4XxJ44NaIUQQADxAVhxDoUIkEg0haXmFwQBkAB7B4AB0uC4ABjABDAA7KiAHNmAY5gZDoqRSJkDgACNwCQLARFwFBqFMah0JoEhwFCIRVRGcwQAAa2YABPLgHgASykGiAAsOAw2hBUnY9CCYJSAFsuJkLS0MMzDxAgMIRFYUgkDCAilIACjomipC0gA3ZgqIAG3IgAaKjSIABzYqiaNI0LQuYfyeIASgcvYCOocQCJTJTEtCuRLKYrgYrkZK5BiqiZGYLgtK4biZC4BysIwZJBHYchxJQJBJkELSysgcgRvQKipD0xqqOmrg+Mq0KuCmqQoq4OQuBCrg6KoyytJosjEoY2QkpS3iAFkgMqRgiWzURXwuh09QQG7LHIe7tQORwIToN64wevUDQoWlbt+jgLu3CIXp+97zgOFNvruuNvCYLD4SWVgwjOJYED2K16ADZjHO6UVUcSFBxgDJDqVG8ZSZtEFgwx48pSZkQTlEaToaQX7pwghCuoHElYOg2machDgpEc8ZyCB5CgbcXAZ0IbBSHUMAED6nBCDAdA2A1wcQAAE2YAAzOjKqkDhCeQ8nMO6BGvyl0RZZaeXr0RDHRptT2fvliW7dlSBaYHMW3Cw6ACEj7AxJ6tNBAQWAo+jgRCBxlAxDYagwDgI3TfN0LLetkPnHYDtXG7APNCDu2OWrgCPe5aufdEOvYNdrrw19iNYJltQWc7qsK9YUVzmHoHznrq3MLF7w6GH6u7hBSXh8VFmZ6lNwYHM0xVaoMAolIdB8EKaBU8gSOok88Q8CznPjbNi3YIH0fn7NDCx7ZgWZOwfrRhAWK2KsCKilNKMgqKBgACoABkZoMWCjIKQHFWpAA)
-
-Click to view interactive schematic (credit: Kragen)
+[![caption:Click to view interactive schematic (credit: Kragen)](https://blog.za3k.com/wp-content/uploads/2023/06/schematic-1024x414.png)](http://falstad.com/circuit/circuitjs.html?ctz=CQAgjCAMB0l3BWK0AckDMYwE4As3sA2SQgdgCYFsQFIaRd0aBTAWiwCgBncQ8bciEK4Q5XHToQALgCcArs24gi-QWFwixE8CFkKllPjkHpIm8VEt7FPMKSMDRY0Rcm75NhmAeDcwl9rSHkro6D4g6Cjmge76PKF8hhFREWaWQXFeiQh8fiKmIm7WSnbZic4F6bGeSUmVlUXBPCpJ6vlpjZneojlC7YU6xfFh4OQoySKlVUNZo+N54PbTTYtGY06TS501vWDrlVPbSip7422ry11r4-6Hg8EA7rxzytdQHE8n61On708-61a60gHx6bwSLxBTwhv1w3V+UOexleqj+KORP0ciMxglaWNBeJMI2RiJhjjh4URFLBERGSVJdN6tV6iOZRiW9NBUySLRZoN5RjKaP8Wj6qUKXI04vAUtF2NlFnOhwJzm5zjlKuiG2lpLS9TSGuhBosBy2oMimz4FoCaOtoutDVBCymC0NDBFFgWjqetyWHokHAASmL-P50IJtBYkNoYAgODIQyJbnt0vBEcnBL6+PLJimlWaE+dblKsBHwGmgzKk5MpeHLHQo-XkHGnuRVSm25b3gnO2Le6XU-BK72RRUyw26NH69AW9KB6bs-HpWG0gPJBXg5UV-lxwxJ03Y+aUvPjwWJmLrWvy0PNykwyk65H9zGZ06M+6uyCEwt-M6U+ubw-MUvV3RsX1ndg3nhYFQUg1F4XxJ44NaIUQQADxAVhxDoUIkEg0haXmFwQBkAB7B4AB0uC4ABjABDAA7KiAHNmAY5gZDoqRSJkDgACNwCQLARFwFBqFMah0JoEhwFCIRVRGcwQAAa2YABPLgHgASykGiAAsOAw2hBUnY9CCYJSAFsuJkLS0MMzDxAgMIRFYUgkDCAilIACjomipC0gA3ZgqIAG3IgAaKjSIABzYqiaNI0LQuYfyeIASgcvYCOocQCJTJTEtCuRLKYrgYrkZK5BiqiZGYLgtK4biZC4BysIwZJBHYchxJQJBJkELSysgcgRvQKipD0xqqOmrg+Mq0KuCmqQoq4OQuBCrg6KoyytJosjEoY2QkpS3iAFkgMqRgiWzURXwuh09QQG7LHIe7tQORwIToN64wevUDQoWlbt+jgLu3CIXp+97zgOFNvruuNvCYLD4SWVgwjOJYED2K16ADZjHO6UVUcSFBxgDJDqVG8ZSZtEFgwx48pSZkQTlEaToaQX7pwghCuoHElYOg2machDgpEc8ZyCB5CgbcXAZ0IbBSHUMAED6nBCDAdA2A1wcQAAE2YAAzOjKqkDhCeQ8nMO6BGvyl0RZZaeXr0RDHRptT2fvliW7dlSBaYHMW3Cw6ACEj7AxJ6tNBAQWAo+jgRCBxlAxDYagwDgI3TfN0LLetkPnHYDtXG7APNCDu2OWrgCPe5aufdEOvYNdrrw19iNYJltQWc7qsK9YUVzmHoHznrq3MLF7w6GH6u7hBSXh8VFmZ6lNwYHM0xVaoMAolIdB8EKaBU8gSOok88Q8CznPjbNi3YIH0fn7NDCx7ZgWZOwfrRhAWK2KsCKilNKMgqKBgACoABkZoMWCjIKQHFWpAA)
 
 And this is how most keyboards work. There are some special keys–Shift, Ctrl, Alt, etc might be on their very own line, since we want to detect key combos. And better keyboards can detect multiple keys being pressed at once (N-key rollover), which I think they do by having a completely separate wire to each key which multiple people tell me they do with a diode next to each key.
 
@@ -70,6 +68,8 @@ Did this work perfectly? Definitely not.
 
 This was my third attempt. Here’s the second, using aluminium foil. It worked at least as well, maybe better, but it was harder to make. I just taped the foil down, taking care not to cover the contact points. I am told the aluminium will gradually oxidize, making it non-conductive.
 
+<figure class="wp-block-gallery has-nested-images columns-5 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex" markdown="1">
+
 [![](https://blog.za3k.com/wp-content/uploads/2023/06/aluminium_parts-150x150.jpg)](https://blog.za3k.com/wp-content/uploads/2023/06/aluminium_parts-scaled.jpg)
 
 [![](https://blog.za3k.com/wp-content/uploads/2023/06/aluminium_layers-150x150.jpg)](https://blog.za3k.com/wp-content/uploads/2023/06/aluminium_layers-scaled.jpg)
@@ -82,8 +82,14 @@ This was my third attempt. Here’s the second, using aluminium foil. It worked
 
 [![](https://blog.za3k.com/wp-content/uploads/2023/06/side_view-1024x576.jpg)](https://blog.za3k.com/wp-content/uploads/2023/06/side_view-scaled.jpg)
 
+</figure>
+
 And here’s one using graphite from drawing hard with a #2 pencil.. Graphite, it turns out, works terribly, and I couldn’t read a signal halfway down the index card. Despite what people have told me, I’m not yet convinced you can make a conductive wire out of it.
 
+<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex" markdown="1">
+
 [![](https://blog.za3k.com/wp-content/uploads/2023/06/graphite_parts-1024x442.jpg)](https://blog.za3k.com/wp-content/uploads/2023/06/graphite_parts-scaled.jpg)
 
 [![](https://blog.za3k.com/wp-content/uploads/2023/06/graphite_done-1024x666.jpg)](https://blog.za3k.com/wp-content/uploads/2023/06/graphite_done-scaled.jpg)
+
+</figure>
index 321630423429e9fb1c42c6c3eb46e3bbe9927ded..eb296993457214fe19a4c90673f3324fbb040534 100644 (file)
@@ -18,57 +18,37 @@ wordpress_slug: e-ink-laptop
 ---
 I’ve been prototyping an e-ink laptop.
 
-[![a wooden box with a keyboard inside and an e-ink screen mounted to it](https://blog.za3k.com/wp-content/uploads/2022/10/front_view_open-1024x768.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/front_view_open-scaled.jpg)
+[![alt:a wooden box with a keyboard inside and an e-ink screen mounted to it](https://blog.za3k.com/wp-content/uploads/2022/10/front_view_open-1024x768.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/front_view_open-scaled.jpg)
 
-[![a closed wooden box with a keyboard visible through a hole in the front](https://blog.za3k.com/wp-content/uploads/2022/10/front_view-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/front_view-scaled.jpg)
-
-Closed “laptop”
+[![caption:Closed “laptop”](https://blog.za3k.com/wp-content/uploads/2022/10/front_view-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/front_view-scaled.jpg)
 
 I’m not the first, there have been many other such devices before. I came up with the idea independently, but the specifics are heavily inspired by the [Ultimate Writer](https://alternativebit.fr/posts/ultimate-writer/) by NinjaTrappeur in 2018. Similar to him, my use case is typing without distractions, and reading books. E-ink displays are quite slow to update, so I don’t think it can serve as a general purpose computer. Here’s a video of it in action. It operates at one frame per second.
 
-The electronics are not fully done. They need better secured, and I’m going to redo the cabling and power back.
-
-[![an e-ink screen reading "hello world"](https://blog.za3k.com/wp-content/uploads/2022/10/screen_closeup-1024x768.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/screen_closeup-scaled.jpg)
-
-I broke a screen over-tightening a nut. That said, I like this look pretty well! If the lid was thicker, I know how to avoid screws on the other side, too.
-
-[![a e-ink screen loose on a desk, covered in garbage](https://blog.za3k.com/wp-content/uploads/2022/10/early_garbage-crop-300x224.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/early_garbage-crop-scaled.jpg)
-
-Early screen progress. I got *something* to display, but not what I wanted.
+<video controls="" src="https://za3k.com/archive/eink_typing1.mp4"></video>
 
-[![a mechanical keyboard in a box](https://blog.za3k.com/wp-content/uploads/2022/10/keyboard_closeup-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/keyboard_closeup-scaled.jpg)
+The electronics are not fully done. They need better secured, and I’m going to redo the cabling and power back.
 
-I found a really nice, cheap mechanical keyboard on ebay. The main downside is that it’s heavy–730g. It also consumes heavy amounts of power, even when not in use. I have a nearly identical keyboard that doesn’t, which I’ll use for v2.
+[![caption:I broke a screen over-tightening a nut. That said, I like this look pretty well! If the lid was thicker, I know how to avoid screws on the other side, too.](https://blog.za3k.com/wp-content/uploads/2022/10/screen_closeup-1024x768.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/screen_closeup-scaled.jpg)
 
-[![a homemade battery pack with four red lithium-ion batteries](https://blog.za3k.com/wp-content/uploads/2022/10/battery_back_closeup-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/battery_back_closeup-scaled.jpg)
+[![caption:Early screen progress. I got something to display, but not what I wanted.](https://blog.za3k.com/wp-content/uploads/2022/10/early_garbage-crop-300x224.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/early_garbage-crop-scaled.jpg)
 
-I made my own lithium-ion battery pack. It works well, but it doesn’t quite fit so I’m going to redo it with one less cell. It also needs an on/off switch and a right angle USB cable.
+[![caption:I found a really nice, cheap mechanical keyboard on ebay. The main downside is that it’s heavy–730g. It also consumes heavy amounts of power, even when not in use. I have a nearly identical keyboard that doesn’t, which I’ll use for v2.](https://blog.za3k.com/wp-content/uploads/2022/10/keyboard_closeup-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/keyboard_closeup-scaled.jpg)
 
-[![a close-up of a raspberry pi in a box](https://blog.za3k.com/wp-content/uploads/2022/10/pi_closeup-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/pi_closeup-scaled.jpg)
+[![caption:I made my own lithium-ion battery pack. It works well, but it doesn’t quite fit so I’m going to redo it with one less cell. It also needs an on/off switch and a right angle USB cable.](https://blog.za3k.com/wp-content/uploads/2022/10/battery_back_closeup-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/battery_back_closeup-scaled.jpg)
 
-The prototype is powered by a Raspberry Pi 3. The final version will use a microcontroller to save power. The Pi Zero can also be swapped in with no changes, and uses a third of the power. But it’s noticeably slower and takes 30 seconds to boot. For prototyping I’m using the Pi 3 for now.
+[![caption:The prototype is powered by a Raspberry Pi 3. The final version will use a microcontroller to save power. The Pi Zero can also be swapped in with no changes, and uses a third of the power. But it’s noticeably slower and takes 30 seconds to boot. For prototyping I’m using the Pi 3 for now.](https://blog.za3k.com/wp-content/uploads/2022/10/pi_closeup-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/pi_closeup-scaled.jpg)
 
 I’m not the best woodworker, but I’m slowly learning. Here are pictures of case and lid action.
 
-[![back view of a box with hinges](https://blog.za3k.com/wp-content/uploads/2022/10/added_back_stops-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/added_back_stops-scaled.jpg)
-
-Hinged lid. The screen is on the bottom of the lid.
-
-[![back view of a wooden stop, closed](https://blog.za3k.com/wp-content/uploads/2022/10/back_stop-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/back_stop-scaled.jpg)
-
-A wooden stop on each side
-
-[![back view of a wooden stop, open](https://blog.za3k.com/wp-content/uploads/2022/10/back_stop_action-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/back_stop_action-scaled.jpg)
-
-Wooden stop with lid open. It hits the bottom, bringing the lid/screen to a rest at vertical.
+[![caption:Hinged lid. The screen is on the bottom of the lid.](https://blog.za3k.com/wp-content/uploads/2022/10/added_back_stops-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/added_back_stops-scaled.jpg)
 
-[![picture of a latch, open](https://blog.za3k.com/wp-content/uploads/2022/10/hinge-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/hinge-scaled.jpg)
+[![caption:A wooden stop on each side](https://blog.za3k.com/wp-content/uploads/2022/10/back_stop-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/back_stop-scaled.jpg)
 
-Latches on the side
+[![caption:Wooden stop with lid open. It hits the bottom, bringing the lid/screen to a rest at vertical.](https://blog.za3k.com/wp-content/uploads/2022/10/back_stop_action-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/back_stop_action-scaled.jpg)
 
-[![close-up of a hinge in cracked plywood](https://blog.za3k.com/wp-content/uploads/2022/10/hinge_crack-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/hinge_crack-scaled.jpg)
+[![caption:Latches on the side](https://blog.za3k.com/wp-content/uploads/2022/10/hinge-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/hinge-scaled.jpg)
 
-Don’t put hinges sideways into plywood. But if you do, drill big pilot holes. Out of six screw, one cracked a little.
+[![caption:Don’t put hinges sideways into plywood. But if you do, drill big pilot holes. Out of six screw, one cracked a little.](https://blog.za3k.com/wp-content/uploads/2022/10/hinge_crack-300x225.jpg)](https://blog.za3k.com/wp-content/uploads/2022/10/hinge_crack-scaled.jpg)
 
 On the software end, shout outs to:
 
index 6e59d135f21ce4636c578f924143fc7a0f691ebd..47e410e331c8f6db5309a405d14221dc1b0135c7 100644 (file)
@@ -17,9 +17,7 @@ wordpress_slug: hack-a-day-day-04-lashed-table
 ---
 Lashed furniture is made using sticks and rope or twine. Today’s project was to make one out of bamboo and brown paracord. The frame is shown–imagine boards or many pieces of bamboo forming a top.
 
-[![](https://blog.za3k.com/wp-content/uploads/2023/11/table-1024x1002.jpg)](https://blog.za3k.com/wp-content/uploads/2023/11/table.jpg)
-
-Hello to the young lady who decided to pose and join in the photo!
+[![caption:Hello to the young lady who decided to pose and join in the photo!](https://blog.za3k.com/wp-content/uploads/2023/11/table-1024x1002.jpg)](https://blog.za3k.com/wp-content/uploads/2023/11/table.jpg)
 
 We found this little $5 tool to be incredibly good for cutting bamboo. It’s designed for almost the same thing, cutting metal pipes.
 
index cec7b441fa704d740edf02c9bd448c0c96bec7e1..4c80a296240ca53d642269340a6ab42d9049854f 100644 (file)
@@ -18,10 +18,14 @@ Today’s update is a short one. I ported my raytracer from [day 02](https://blo
 
 The visuals are pretty much the same. Incidentally I discovered the striations on the ground disappear if we increase the floating point precision.
 
+<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex" markdown="1">
+
 [![](https://blog.za3k.com/wp-content/uploads/2023/11/v15b-300x225.png)](https://blog.za3k.com/wp-content/uploads/2023/11/v15b.png)
 
 [![](https://blog.za3k.com/wp-content/uploads/2023/11/v16-300x225.png)](https://blog.za3k.com/wp-content/uploads/2023/11/v16.png)
 
+</figure>
+
 Render on the GPU is 30x faster (0.05 fps -> 3 fps). That’s still not very fast.
 
 I didn’t get video working yesterday, or anything else visually new. I will call this one a failure overall, because I have nothing interesting to show off. I learned stuff and made progress though, so it’s not so bad.
index bacfb9c75358e58a40e3b807418261a7f72ee639..98cc52f68e95192e3f473013c56537ac29a79056 100644 (file)
@@ -18,13 +18,8 @@ Today I wrote a simple raytracer. A raytracer is a very simple way to draw excel
 
 Mine is based on the explanation (and code) from “[Ray Tracing in One Weekend](https://raytracing.github.io/books/RayTracingInOneWeekend.html)“, and the code from “[My Very First Raytracer](http://canonical.org/~kragen/sw/aspmisc/my-very-first-raytracer.html)“.
 
-[![](https://blog.za3k.com/wp-content/uploads/2023/11/v11b.png)](https://github.com/za3k/ha3k-02)
-
-Matte spheres in different shades of grey. The blue in the spheres is reflected from the sky.
+[![caption:Matte spheres in different shades of grey. The blue in the spheres is reflected from the sky.](https://blog.za3k.com/wp-content/uploads/2023/11/v11b.png)](https://github.com/za3k/ha3k-02)
 
 The motivation for this project was to learn how to make things run faster on a graphics card. I quickly realized (before I wrote a line of code) that I’d need the basic raytracer to be its own project. Having it run faster will have to be a job for another day!
 
-[![](https://blog.za3k.com/wp-content/uploads/2023/11/v15c.png)](https://github.com/za3k/ha3k-02)
-
-A final demo scene, showing off reflectivity and metal surfaces.  
-Note the pincushion distortion of the overall render, and striations on the ground.
+[![caption:A final demo scene, showing off reflectivity and metal surfaces.Note the pincushion distortion of the overall render, and striations on the ground.](https://blog.za3k.com/wp-content/uploads/2023/11/v15c.png)](https://github.com/za3k/ha3k-02)
index c54922f9f219e8b863b0c5c3f1b76c8f48e635e0..ad0aa5f463bdc6ef34e8a8db44c0b66556f19dcf 100644 (file)
@@ -31,8 +31,12 @@ Next, I made the actual PCB layout.
 
 To my surprise, after a little jiggling I got it down to a one-layer design.
 
+<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex" markdown="1">
+
 [![](https://blog.za3k.com/wp-content/uploads/2023/11/kicad-pcb2.png)](https://blog.za3k.com/wp-content/uploads/2023/11/kicad-pcb2.png)
 
+</figure>
+
 That means home-printing would be much easier. No having to line up the two sides carefully.
 
 [![](https://blog.za3k.com/wp-content/uploads/2023/11/printable.png)](https://blog.za3k.com/wp-content/uploads/2023/11/printable.png)
@@ -43,12 +47,16 @@ I printed out the image on paper (backwards) on my toner printer, and taped it t
 
 First, I tried laminating it. Almost no ink transferred, and the paper came off easily. Then I tried ironing it, but the paper stick to the iron and not to the PCB. The tape melted on the iron. For both, I dunked them in water after, which is supposed to help loosen the paper.
 
+<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex" markdown="1">
+
 [![](https://blog.za3k.com/wp-content/uploads/2023/11/image-169x300.png)](https://blog.za3k.com/wp-content/uploads/2023/11/image.png)
 
 [![](https://blog.za3k.com/wp-content/uploads/2023/11/image-2-169x300.png)](https://blog.za3k.com/wp-content/uploads/2023/11/image-2.png)
 
 [![](https://blog.za3k.com/wp-content/uploads/2023/11/image-4-169x300.png)](https://blog.za3k.com/wp-content/uploads/2023/11/image-4.png)
 
+</figure>
+
 Next, I tried the standard advice–sand the PCBs (I used 320 grit) and use glossy paper. This time, both pieces of paper stuck very well. I was wary about the iron coming off again, so I just left it on place on the highest heat–this worked fine for adhesion, but I had to iron out wrinkles at the end. The laminated piece had lose edges, while the ironed piece was on there totally flat.
 
 I tried peeling off the laminated paper–oops! It peeled back and most of the ink stayed on the paper. I think if I took it off more carefully, it would have worked.
index eaaa3c9c2804455e23cb33ced719ec3bde53d989..04bfaa9d2d2d0aab560f9f0eb9b35914863b44a6 100644 (file)
@@ -18,8 +18,6 @@ wordpress_slug: hack-a-day-hack-a-clock
 ---
 Thursday’s project was [Hack-A-Clock](https://tilde.za3k.com/hackaday/clock/) ([demo](https://tilde.za3k.com/hackaday/clock/), [source](https://github.com/za3k/day24_clock)). It is a decimal time clock, displaying the time in revolutionary french time (minus their weird calendar).
 
-[![](https://blog.za3k.com/wp-content/uploads/2022/11/screenshot-21.png)](https://blog.za3k.com/wp-content/uploads/2022/11/screenshot-21.png)
-
-[https://tilde.za3k.com/hackaday/clock/](https://tilde.za3k.com/hackaday/clock/)
+[![caption:https://tilde.za3k.com/hackaday/clock/](https://blog.za3k.com/wp-content/uploads/2022/11/screenshot-21.png)](https://blog.za3k.com/wp-content/uploads/2022/11/screenshot-21.png)
 
 This is another “phone it in” project but I think it would have been okay with more accompanying explanation and better styling.
index 3599d8ec9f8a26d042d63bccb6de1fb99c4c845d..b0459b1af1f6f451e4b892c58aa8a9deb22347bf 100644 (file)
@@ -16,7 +16,7 @@ updated: 2015-06-28 02:24:09-07:00
 wordpress_id: 225
 wordpress_slug: irc
 ---
-[![2015-06-28-021223_683x381](https://blog.za3k.com/wp-content/uploads/2015/06/2015-06-28-021223_683x381.jpg)](https://blog.za3k.com/wp-content/uploads/2015/06/2015-06-28-021223_683x381.jpg)I added an IRC server to my growing list of services. You can access it at:
+[![alt:2015-06-28-021223_683x381](https://blog.za3k.com/wp-content/uploads/2015/06/2015-06-28-021223_683x381.jpg)](https://blog.za3k.com/wp-content/uploads/2015/06/2015-06-28-021223_683x381.jpg)I added an IRC server to my growing list of services. You can access it at:
 
 -   irc.za3k.com
 -   Port 6667
index b6d6cdd8f237ca4dac397891614a5f10b64bf7bf..0a159a64038521617717c9d2813fad23dcd3bb3f 100644 (file)
@@ -17,9 +17,7 @@ I play D&D. There are a thousand initiative trackers out there. Here’s one I i
 
 First, each player picks a Meeple to be their character’s mini.
 
-[![Four meeples on an index card, representing a wagon.](https://blog.za3k.com/wp-content/uploads/2023/07/board-crop-1024x387.jpg)](https://blog.za3k.com/wp-content/uploads/2023/07/board-crop.jpg)
-
-Four PCs on a wagon move over swampy terrain.
+[![caption:Four PCs on a wagon move over swampy terrain.](https://blog.za3k.com/wp-content/uploads/2023/07/board-crop-1024x387.jpg)](https://blog.za3k.com/wp-content/uploads/2023/07/board-crop.jpg)
 
 Quick, roll initiative! The players all roll, and so do the enemies. We grab a second meeple for each player, as well as second token for each enemy. This becomes the initiative tracker.
 
index 3347ab0c5f5afd5f6af08e78f113c5debceb18ad..afe7602e602d93807ed3488ebb8b2fe8cd0830d6 100644 (file)
@@ -13,7 +13,7 @@ updated: 2014-12-02 13:51:00-07:00
 wordpress_id: 84
 wordpress_slug: money-orders
 ---
-[![A postal money order](https://blog.za3k.com/wp-content/uploads/2014/12/Figure6-300x237.jpg)](https://blog.za3k.com/wp-content/uploads/2014/12/Figure6.jpg)
+[![alt:A postal money order](https://blog.za3k.com/wp-content/uploads/2014/12/Figure6-300x237.jpg)](https://blog.za3k.com/wp-content/uploads/2014/12/Figure6.jpg)
 
 A postal money order
 
index 40d2db94219edfaba4ef3b932cc1265a4e949b29..38ee368bea9bd08f5b166445f65a29b3771eae05 100644 (file)
@@ -16,7 +16,7 @@ updated: 2015-01-22 21:17:18-07:00
 wordpress_id: 104
 wordpress_slug: moreorcs-com
 ---
-[![orc](https://blog.za3k.com/wp-content/uploads/2015/01/orc-300x300.jpg)](http://moreorcs.com)
+[![alt:orc](https://blog.za3k.com/wp-content/uploads/2015/01/orc-300x300.jpg)](http://moreorcs.com)
 
 My newest site: [http://moreorcs.com/](http://moreorcs.com/)
 
index 112c541538a855b409b0387de37e9d0865019fca..0e9f084a996ec842a16187621f3ec3bd2de13793 100644 (file)
@@ -23,7 +23,7 @@ wordpress_slug: multi-universe-rpg-toy
 -   No…
 -   No, and…
 
-[![cube](https://blog.za3k.com/wp-content/uploads/2015/04/cube-300x298.jpg)](https://blog.za3k.com/wp-content/uploads/2015/04/cube.jpg)
+[![alt:cube](https://blog.za3k.com/wp-content/uploads/2015/04/cube-300x298.jpg)](https://blog.za3k.com/wp-content/uploads/2015/04/cube.jpg)
 
 Their example:
 
index 17b9dfc26021712a5c77fa96fe79989675ae0e54..e1f8463e3d28ee32bb28e64bd0af69c78eff7e1f 100644 (file)
@@ -18,10 +18,14 @@ I’ve had a couple people ask how my TODO list works, so here’s what I’ve b
 
 The calendar has anything that needs to be done on a specific day. Birthday reminders, doctor’s appointments, and weekly activities like board game night or trash day. You’ve seen calendars. This is nothing interesting.
 
+<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex" markdown="1">
+
 [![](https://blog.za3k.com/wp-content/uploads/2023/07/weekly-crop-246x300.jpg)](https://blog.za3k.com/wp-content/uploads/2023/07/weekly-crop.jpg)
 
 [![](https://blog.za3k.com/wp-content/uploads/2023/07/cal-crop-300x255.jpg)](https://blog.za3k.com/wp-content/uploads/2023/07/cal-crop.jpg)
 
+</figure>
+
 **A yearly goals list**
 
 A yearly list of my goals for the year. I typically have 5-15 goals, and finish half of them.
index 725f868438bcb135d810f18556d8d0a97fcbc7b1..1c7d36164026f932e244fcdd04cad78b708f9dc0 100644 (file)
@@ -13,18 +13,22 @@ updated: 2023-02-02 14:41:07-07:00
 wordpress_id: 988
 wordpress_slug: painting
 ---
-[![](https://blog.za3k.com/wp-content/uploads/2023/02/waves-1014x1024.jpg)](https://blog.za3k.com/wp-content/uploads/2023/02/waves.jpg)
+<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex" markdown="1">
 
-Waves, Z Vance 2023
+[![caption:Waves, Z Vance 2023](https://blog.za3k.com/wp-content/uploads/2023/02/waves-1014x1024.jpg)](https://blog.za3k.com/wp-content/uploads/2023/02/waves.jpg)
 
-[![](https://blog.za3k.com/wp-content/uploads/2023/02/small-977x1024.jpg)](https://blog.za3k.com/wp-content/uploads/2023/02/small.jpg)
+</figure>
 
-Bouquet, Z Vance 2023
+<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex" markdown="1">
 
-[![](https://blog.za3k.com/wp-content/uploads/2023/02/art1-crop-448x1024.jpg)](https://blog.za3k.com/wp-content/uploads/2023/02/art1-crop.jpg)
+[![caption:Bouquet, Z Vance 2023](https://blog.za3k.com/wp-content/uploads/2023/02/small-977x1024.jpg)](https://blog.za3k.com/wp-content/uploads/2023/02/small.jpg)
 
-Worm Statue, Z Vance 2023
+</figure>
 
-[![](https://blog.za3k.com/wp-content/uploads/2023/02/statue1-crop-635x1024.jpg)](https://blog.za3k.com/wp-content/uploads/2023/02/statue1-crop.jpg)
+<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex" markdown="1">
 
-Model
+[![caption:Worm Statue, Z Vance 2023](https://blog.za3k.com/wp-content/uploads/2023/02/art1-crop-448x1024.jpg)](https://blog.za3k.com/wp-content/uploads/2023/02/art1-crop.jpg)
+
+[![caption:Model](https://blog.za3k.com/wp-content/uploads/2023/02/statue1-crop-635x1024.jpg)](https://blog.za3k.com/wp-content/uploads/2023/02/statue1-crop.jpg)
+
+</figure>
index 7890a6dbb2ad800b8f2ece02497491ddefd87b4a..0b71a05e343bca6f29347e123a7e0325197f51e8 100644 (file)
@@ -15,4 +15,4 @@ updated: 2015-10-22 17:07:34-07:00
 wordpress_id: 334
 wordpress_slug: pixel-alphabet
 ---
-[![Alphabetx16](https://blog.za3k.com/wp-content/uploads/2015/10/Alphabetx16-e1445558843487.png)](https://blog.za3k.com/wp-content/uploads/2015/10/Alphabetx16.png)A small font I designed. I’m pretty proud of it.
+[![alt:Alphabetx16](https://blog.za3k.com/wp-content/uploads/2015/10/Alphabetx16-e1445558843487.png)](https://blog.za3k.com/wp-content/uploads/2015/10/Alphabetx16.png)A small font I designed. I’m pretty proud of it.
index 8ea05469d4d982084a541b490a707f7d2d38de1e..11895496f5aaa373bd93a8fe51cb53f6b05f726a 100644 (file)
@@ -12,4 +12,4 @@ updated: 2015-02-17 11:53:54-07:00
 wordpress_id: 112
 wordpress_slug: pixel-art-a-cool-cat
 ---
-[![A Cool Cat](https://blog.za3k.com/wp-content/uploads/2015/02/Screen-Shot-2015-02-03-at-9.16.08-PM-300x177.png)](https://blog.za3k.com/wp-content/uploads/2015/02/Screen-Shot-2015-02-03-at-9.16.08-PM.png)
+[![alt:A Cool Cat](https://blog.za3k.com/wp-content/uploads/2015/02/Screen-Shot-2015-02-03-at-9.16.08-PM-300x177.png)](https://blog.za3k.com/wp-content/uploads/2015/02/Screen-Shot-2015-02-03-at-9.16.08-PM.png)
index f6049ddc7d9c5ca2b301f780e01190ec9d1d6476..3cc445fb891581b55e6ebd0aabba2af41870b3b9 100644 (file)
@@ -14,10 +14,6 @@ wordpress_slug: printable-todo-list
 ---
 I made a minimal, printable [TODO list](https://za3k.com/archive/todo.pdf). Enjoy!
 
-[![](https://blog.za3k.com/wp-content/uploads/2024/01/used-short-crop-1024x338.jpg)](https://za3k.com/archive/todo.pdf)
+[![caption:Just print it](https://blog.za3k.com/wp-content/uploads/2024/01/used-short-crop-1024x338.jpg)](https://za3k.com/archive/todo.pdf)
 
-Just print it
-
-[![](https://blog.za3k.com/wp-content/uploads/2024/01/laminated-short-crop-1024x445.jpg)](https://za3k.com/archive/todo.pdf)
-
-or get fancy and laminate
+[![caption:or get fancy and laminate](https://blog.za3k.com/wp-content/uploads/2024/01/laminated-short-crop-1024x445.jpg)](https://za3k.com/archive/todo.pdf)
index ff06c85979bbe98f8117b45b11955471bdc5e1f7..3f279c02f7b1104782d18b5fa60b639a09df1e88 100644 (file)
@@ -23,17 +23,19 @@ I wanted to make a 3D game. In my game, you live in a geodesic dome, and can’t
 
 A geodesic dome, I learned, is related to the *icosahedron*, or d20 from RPGs.
 
+<figure class="wp-block-gallery has-nested-images columns-default wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex" markdown="1">
+
 [![](https://blog.za3k.com/wp-content/uploads/2024/06/image-150x150.png)](https://blog.za3k.com/wp-content/uploads/2024/06/image.png)
 
 [![](https://blog.za3k.com/wp-content/uploads/2024/06/image-1-150x150.png)](https://blog.za3k.com/wp-content/uploads/2024/06/image-1.png)
 
 [![](https://blog.za3k.com/wp-content/uploads/2024/06/image-3-150x150.png)](https://blog.za3k.com/wp-content/uploads/2024/06/image-3.png)
 
-A simple dome is the top half of the icosahedron. As they get more complex, you divide each triangle into more and more smaller triangles.
+</figure>
 
-[![](https://blog.za3k.com/wp-content/uploads/2024/06/sphere-crop.jpg)](https://blog.za3k.com/wp-content/uploads/2024/06/sphere-crop.jpg)
+A simple dome is the top half of the icosahedron. As they get more complex, you divide each triangle into more and more smaller triangles.
 
-Icosahedron getting more and more detailed. Geodesic domes are the top half of each sphere.
+[![caption:Icosahedron getting more and more detailed. Geodesic domes are the top half of each sphere.](https://blog.za3k.com/wp-content/uploads/2024/06/sphere-crop.jpg)](https://blog.za3k.com/wp-content/uploads/2024/06/sphere-crop.jpg)
 
 So to make a nice geodesic dome, we could find one (I failed), make one in Blender (too hard), or use some math to generate one in Godot. And to do that math, we need to know the list of 20 icosahedron faces. Which basically just needs the list of the 12 vertices!
 
index 841ad5b5f40d6e4e9835eb9169d8ae94577a6af8..2fb22faa8b9a469a8dc9e13f5c01c8b0020cc755 100644 (file)
@@ -12,7 +12,7 @@ updated: 2015-10-27 19:10:59-07:00
 wordpress_id: 341
 wordpress_slug: roasted-chickpeas
 ---
-[![roasted](https://blog.za3k.com/wp-content/uploads/2015/10/roasted-300x264.jpg)](https://blog.za3k.com/wp-content/uploads/2015/10/roasted.jpg)Here’s how you make roasted chickpeas (aka garbanzo beans):
+[![alt:roasted](https://blog.za3k.com/wp-content/uploads/2015/10/roasted-300x264.jpg)](https://blog.za3k.com/wp-content/uploads/2015/10/roasted.jpg)Here’s how you make roasted chickpeas (aka garbanzo beans):
 
 1.  Set the oven to 400F.
 2.  Drain and empty a can or so of chickpeas into a collander and wash them
index 3f2759915f2f14ed66f50daf13134a95a6d7707a..018e166b42613b121189e49941c9f91c3813b7d3 100644 (file)
@@ -24,7 +24,7 @@ I scan each and every piece of paper that passes through my hands. All my old to
 
 The input is some raw scans. They could be handwritten notes, printed computer documents, photos, or whatever.
 
-[![A movie ticket stub](https://github.com/za3k/scan-organizer/raw/master/screenshots/sample_image.jpg)](https://github.com/za3k/scan-organizer/blob/master/screenshots/sample_image.jpg)
+[![alt:A movie ticket stub](https://github.com/za3k/scan-organizer/raw/master/screenshots/sample_image.jpg)](https://github.com/za3k/scan-organizer/blob/master/screenshots/sample_image.jpg)
 
 The final product is that for each file like `ticket.jpg`, we end up with `ticket.txt`. This has metadata about the file (tags, category, notes) and a transcription of any text in the image, to make it searchable with `grep` & co.
 
@@ -58,25 +58,25 @@ At any point I can exit the program, and all progress is saved. I have 6000 phot
 
 ### [](https://github.com/za3k/scan-organizer#phase-1-rotating-and-cropping)Phase 1: Rotating and Cropping
 
-[![Phase 1: Rotating and Cropping](https://github.com/za3k/scan-organizer/raw/master/screenshots/phase1.png)](https://github.com/za3k/scan-organizer/blob/master/screenshots/phase1.png)
+[![alt:Phase 1: Rotating and Cropping](https://github.com/za3k/scan-organizer/raw/master/screenshots/phase1.png)](https://github.com/za3k/scan-organizer/blob/master/screenshots/phase1.png)
 
 First, I clean up the images. Crop them, rotate them if they’re not facing the right way. I can rotate images with keyboard shortcuts, although there are also buttons at the bottom. Once I’m done, I press a button, and *scan-organizer* advanced to the next un-cleaned photo.
 
 ### [](https://github.com/za3k/scan-organizer#phase-2-sorting-into-folders)Phase 2: Sorting into folders
 
-[![Phase 2: Sorting into folders](https://github.com/za3k/scan-organizer/raw/master/screenshots/phase2.png)](https://github.com/za3k/scan-organizer/blob/master/screenshots/phase2.png)
+[![alt:Phase 2: Sorting into folders](https://github.com/za3k/scan-organizer/raw/master/screenshots/phase2.png)](https://github.com/za3k/scan-organizer/blob/master/screenshots/phase2.png)
 
 Next, I sort things into folders, or “categories”. As I browse folders, I can preview what’s already in that folder.
 
 ### [](https://github.com/za3k/scan-organizer#phase-3-renaming-images)Phase 3: Renaming Images
 
-[![Phase 3: Renaming images](https://github.com/za3k/scan-organizer/raw/master/screenshots/phase3.png)](https://github.com/za3k/scan-organizer/blob/master/screenshots/phase3.png)
+[![alt:Phase 3: Renaming images](https://github.com/za3k/scan-organizer/raw/master/screenshots/phase3.png)](https://github.com/za3k/scan-organizer/blob/master/screenshots/phase3.png)
 
 Renaming images comes next. For convenience, I can browse existing images in the folder, to help name everything in a standard way.
 
 ### [](https://github.com/za3k/scan-organizer#phase-4-tagging-images)Phase 4: Tagging images
 
-[![Phase 4: Tagging images](https://github.com/za3k/scan-organizer/raw/master/screenshots/phase4.png)](https://github.com/za3k/scan-organizer/blob/master/screenshots/phase4.png)
+[![alt:Phase 4: Tagging images](https://github.com/za3k/scan-organizer/raw/master/screenshots/phase4.png)](https://github.com/za3k/scan-organizer/blob/master/screenshots/phase4.png)
 
 I tag my images with the type of text. They might be handwritten. Or they might be printed computer documents. You can imagine extending the process with other types of tagging for your use case.
 
@@ -86,7 +86,7 @@ Printed documents are run through OCR. This isn’t actually done yet, but it wi
 
 ### [](https://github.com/za3k/scan-organizer#phase-5-transcribing-by-hand)Phase 5: Transcribing by hand
 
-[![Phase 5a: Transcribing by Hand](https://github.com/za3k/scan-organizer/raw/master/screenshots/phase5.png)](https://github.com/za3k/scan-organizer/blob/master/screenshots/phase5.png)
+[![alt:Phase 5a: Transcribing by Hand](https://github.com/za3k/scan-organizer/raw/master/screenshots/phase5.png)](https://github.com/za3k/scan-organizer/blob/master/screenshots/phase5.png)
 
 I write up all my handwritten documents. I have not found any useful handwriting recognition software. I just do it all by hand.
 
index d451c7821ac0a91489d4e566da17b736a35c91f2..9fada9e18d7f72d876c71070cc84178002212669 100644 (file)
@@ -14,7 +14,7 @@ updated: 2015-10-03 18:17:30-07:00
 wordpress_id: 193
 wordpress_slug: steak-tartare-3
 ---
-[![steak tartare](https://blog.za3k.com/wp-content/uploads/2015/04/steak-tartare.jpg)](https://blog.za3k.com/wp-content/uploads/2015/04/steak-tartare.jpg)  
+[![alt:steak tartare](https://blog.za3k.com/wp-content/uploads/2015/04/steak-tartare.jpg)](https://blog.za3k.com/wp-content/uploads/2015/04/steak-tartare.jpg)  
 Recipe is mostly from [Tricia](http://triciaroxanne.wordpress.com).
 
 Ingredients:
index 51555f5782b379aae22f82c4bd1f3d7ad92f0ff1..8a299fcfe9a0b7aa1189ef42ce644baea9795a09 100644 (file)
@@ -18,19 +18,19 @@ So that’s where we start. Here’s where I went.
 
 I thought, if these books are just a local convenience for an online version, it’s more artistically satisfying to have some representation of that. So I printed up a card catalog of all my books, both the ones I have digital copies of and not:
 
-[![An example catalog card](https://blog.za3k.com/wp-content/uploads/2014/11/sample_card-300x186.png)](https://blog.za3k.com/wp-content/uploads/2014/11/sample_card.png)
+[![alt:An example catalog card](https://blog.za3k.com/wp-content/uploads/2014/11/sample_card-300x186.png)](https://blog.za3k.com/wp-content/uploads/2014/11/sample_card.png)
 
 An example catalog card
 
 That’s what a card looks like. There’s information about the book up top, and a link in the form of a [QR code](http://en.wikipedia.org/wiki/QR_code "QR code") in the middle. The link downloads a PDF version of that book. Obviously being a programmer, the cards all all automatically generated.
 
-[![Book with a card inside](https://blog.za3k.com/wp-content/uploads/2014/11/book-186x300.jpg)](https://blog.za3k.com/wp-content/uploads/2014/11/book.jpg)
+[![alt:Book with a card inside](https://blog.za3k.com/wp-content/uploads/2014/11/book-186x300.jpg)](https://blog.za3k.com/wp-content/uploads/2014/11/book.jpg)
 
 Book with a card inside
 
 For the books where I have a physical copy, I put the card in the book, and it feels like I’m touching the digital copy. My friends can pirate their own personal version of the book (saving me the sadness of lost lent-out books I’m sure we’ve all felt at times). And I just thing it looks darn neat. Some physical books I don’t have a digital version of, since the world is not yet perfect. But at least I can identify them at a glance (and consider sending them off to a service like [http://1dollarscan.com/](http://1dollarscan.com/))
 
-[![Card catalog of digital books](https://blog.za3k.com/wp-content/uploads/2014/11/catalog-225x300.jpg)](https://blog.za3k.com/wp-content/uploads/2014/11/catalog.jpg)
+[![alt:Card catalog of digital books](https://blog.za3k.com/wp-content/uploads/2014/11/catalog-225x300.jpg)](https://blog.za3k.com/wp-content/uploads/2014/11/catalog.jpg)
 
 Card catalog of digital books
 
index 3eb62cbe31d7c35a5a940ed6e80021f85db07a64..5c794b3dc52e513ca4414543fd3de32297d1b942 100644 (file)
@@ -16,6 +16,6 @@ updated: 2015-10-17 19:15:20-07:00
 wordpress_id: 279
 wordpress_slug: tiny-cute-vampire-bat
 ---
-[![vampire bat x16](https://blog.za3k.com/wp-content/uploads/2015/10/vampire-bat-x16.png)](https://blog.za3k.com/wp-content/uploads/2015/10/vampire-bat-x16.png)
+[![alt:vampire bat x16](https://blog.za3k.com/wp-content/uploads/2015/10/vampire-bat-x16.png)](https://blog.za3k.com/wp-content/uploads/2015/10/vampire-bat-x16.png)
 
 Made using [Piskell](http://www.piskelapp.com/)
index 93fe08c4b81c1f6f2830ebe8993e21e31833b008..91502046e63781c2b653cdcdc5bba884e60530e9 100644 (file)
@@ -15,20 +15,20 @@ wordpress_slug: whiteboard-partition
 ---
 I wanted a partition to divide my room, and I had a whiteboard sitting around. I sawed it into three parts, and connected them with hinges:
 
-![whiteboard 2](https://blog.za3k.com/wp-content/uploads/2015/04/whiteboard-2.jpg)
+![alt:whiteboard 2](https://blog.za3k.com/wp-content/uploads/2015/04/whiteboard-2.jpg)
 
 folding whiteboard
 
-![whiteboard 4](https://blog.za3k.com/wp-content/uploads/2015/04/whiteboard-4.jpg)
+![alt:whiteboard 4](https://blog.za3k.com/wp-content/uploads/2015/04/whiteboard-4.jpg)
 
 hinge (front)
 
-![whiteboard 1](https://blog.za3k.com/wp-content/uploads/2015/04/whiteboard-1.jpg)
+![alt:whiteboard 1](https://blog.za3k.com/wp-content/uploads/2015/04/whiteboard-1.jpg)
 
 hinge (back)
 
 I’m a little embarrassed at having done all this, since it was obvious as soon as I started the partition was way too short to work. I figured I’d still get some experience woodworking (this is my first project). Here’s where it went:
 
-![whiteboard 5](https://blog.za3k.com/wp-content/uploads/2015/04/whiteboard-5.jpg)
+![alt:whiteboard 5](https://blog.za3k.com/wp-content/uploads/2015/04/whiteboard-5.jpg)
 
 and I never saw it again
index ac4c2ed5913d713c6bc1b8da3463f1cb690b3a4f..fad9a3397eb1ef9696dcb248c979d146cb79bdb5 100644 (file)
@@ -14,7 +14,7 @@ updated: 2015-10-17 19:15:58-07:00
 wordpress_id: 282
 wordpress_slug: whoosh
 ---
-[![Action Potato](https://blog.za3k.com/wp-content/uploads/2015/10/action-potato-300x300.png)](https://blog.za3k.com/wp-content/uploads/2015/10/action-potato.png)
+[![alt:Action Potato](https://blog.za3k.com/wp-content/uploads/2015/10/action-potato-300x300.png)](https://blog.za3k.com/wp-content/uploads/2015/10/action-potato.png)
 
 Action Potato
 
index f15bf4f5b14ab4d0697c57f640edda2081122b09..9fd196c5db981e5f4e04cdf37abed76e22998a3a 100644 (file)
@@ -15,6 +15,6 @@ updated: 2015-10-10 18:32:20-07:00
 wordpress_id: 288
 wordpress_slug: whsh
 ---
-[![Space Action Potato 2 big](https://blog.za3k.com/wp-content/uploads/2015/10/Space-Action-Potato-2-big.gif)](https://blog.za3k.com/wp-content/uploads/2015/10/Space-Action-Potato-2-big.gif)
+[![alt:Space Action Potato 2 big](https://blog.za3k.com/wp-content/uploads/2015/10/Space-Action-Potato-2-big.gif)](https://blog.za3k.com/wp-content/uploads/2015/10/Space-Action-Potato-2-big.gif)
 
 In space no one car hear “whoosh” sounds but action potato is so cool you still can mostly.
index 8d81035e36299bfb71cf26bc9906280b7f014598..73c25ac8ed305457b52efc51053b77cce3be3d58 100644 (file)
@@ -20,6 +20,6 @@ Today I added credit card processing and address forms–it’s functionally com
 
 Next up I have to clean the site up, because it looks like this:
 
-[![20150402](https://blog.za3k.com/wp-content/uploads/2015/04/20150402.jpg)](https://blog.za3k.com/wp-content/uploads/2015/04/20150402.jpg)
+[![alt:20150402](https://blog.za3k.com/wp-content/uploads/2015/04/20150402.jpg)](https://blog.za3k.com/wp-content/uploads/2015/04/20150402.jpg)
 
 I’ll also add HTTPS.
index 386a1ca71833e62bdc24a2521245135d6c82b9d6..24947d55fa0580b3e0a166d67ae2941ffafffd51 100644 (file)
@@ -17,7 +17,7 @@ wordpress_slug: wip-dead-tree-publishing-3
 ---
 Compared with [last update](https://blog.za3k.com/wip-dead-tree-publishing-2/ "WIP: Dead Tree Publishing 2"),  the Dead Tree Publishing website is looking nicer.
 
-[![Looking better](https://blog.za3k.com/wp-content/uploads/2015/04/2015-04-16-184416_1366x768-e1429235272387.jpg)](https://blog.za3k.com/wp-content/uploads/2015/04/2015-04-16-184416_1366x768.jpg)
+[![alt:Looking better](https://blog.za3k.com/wp-content/uploads/2015/04/2015-04-16-184416_1366x768-e1429235272387.jpg)](https://blog.za3k.com/wp-content/uploads/2015/04/2015-04-16-184416_1366x768.jpg)
 
 Looking better
 
index a87817fac3ba234996cece7600427dd8edd2a399..3c98b902e5dff34ef0ceb43bb557b22739fe8d70 100644 (file)
@@ -16,7 +16,7 @@ wordpress_slug: wip-dead-tree-publishing-4
 ---
 I consider Dead Tree Publishing to be **G**ood **E**nough at this point. It’s launched.
 
-[![2015-04-30-180400_1366x768](https://blog.za3k.com/wp-content/uploads/2015/04/2015-04-30-180400_1366x768.jpg)](https://blog.za3k.com/wp-content/uploads/2015/04/2015-04-30-180400_1366x768.jpg)
+[![alt:2015-04-30-180400_1366x768](https://blog.za3k.com/wp-content/uploads/2015/04/2015-04-30-180400_1366x768.jpg)](https://blog.za3k.com/wp-content/uploads/2015/04/2015-04-30-180400_1366x768.jpg)
 
 New site style, FAQ page
 
index 4d0dad8c392409026ae33f512535f48c35dfbd0d..eceb0b1a2feb28ba7a9b19132ee72aa84ba98c64 100644 (file)
@@ -23,13 +23,13 @@ I use a “back end” publisher who does all the actual printing, and the one I
 
 First you upload a PDF:
 
-[![2](https://blog.za3k.com/wp-content/uploads/2015/03/2-300x90.jpg)](https://blog.za3k.com/wp-content/uploads/2015/03/1.jpg)
+[![alt:2](https://blog.za3k.com/wp-content/uploads/2015/03/2-300x90.jpg)](https://blog.za3k.com/wp-content/uploads/2015/03/1.jpg)
 
 Uploading a book
 
 Then I tell you what your ordering options are (hardcover, softcover, color), and what they cost. I’m also supposed to ask you your address to ship the book, and for you to pay for it,  but those aren’t done yet.
 
-[![1](https://blog.za3k.com/wp-content/uploads/2015/03/1-300x254.jpg)](https://blog.za3k.com/wp-content/uploads/2015/03/1.jpg)
+[![alt:1](https://blog.za3k.com/wp-content/uploads/2015/03/1-300x254.jpg)](https://blog.za3k.com/wp-content/uploads/2015/03/1.jpg)
 
 Book-buying options
 
index 3ac7fc985afa2487a0990c522f314443a9c79df6..896b8ae0173a0d51eb90fc6876340d094d2c50d6 100644 (file)
@@ -23,7 +23,7 @@ PCB from HacKeyboard
 
 Or how to attach headers to the inside of an existing keyboard, which looks like this–:
 
-![Mapping the Innards of a Keyboard : 7 Steps (with Pictures) - Instructables](https://content.instructables.com/FOM/VMTN/HZN0VZGV/FOMVMTNHZN0VZGV.jpg?auto=webp&frame=1&width=2100)
+![alt:Mapping the Innards of a Keyboard : 7 Steps (with Pictures) - Instructables](https://content.instructables.com/FOM/VMTN/HZN0VZGV/FOMVMTNHZN0VZGV.jpg?auto=webp&frame=1&width=2100)
 
 But I found a project called [GOLEM](https://golem.hu/guide/keyboard-build-logs/) with an excellent guide to making your own keyboard. Here is their wiring: