From 382a2cc0c818e7d830b66d0c7330264ebf94f8ef Mon Sep 17 00:00:00 2001 From: Zachary Vance Date: Tue, 30 Jul 2024 14:04:46 -0400 Subject: [PATCH] Fixes --- html2markdown.js | 37 ++++++++++-- markdown2html.py | 20 ++++++- package-lock.json | 59 +++++++------------ package.json | 2 +- posts-html/android-backup-on-arch-linux.html | 5 -- posts-html/backup-android-on-plugin.html | 8 --- ...alling-email-with-postfix-and-dovecot.html | 4 +- posts-html/irc.html | 5 -- ...ng-up-ssl-certificates-using-startssl.html | 5 -- posts-html/the-double-lives-of-books.html | 5 -- posts-html/whiteboard-partition.html | 5 -- posts-html/wip-dead-tree-publishing-2.html | 5 -- posts-html/wip-dead-tree-publishing.html | 5 -- posts-md/2020-books.md | 24 ++++---- posts-md/2021-books.md | 8 +-- posts-md/2022-books.md | 20 +++---- posts-md/a-pixel-art.md | 2 +- posts-md/banh-chung.md | 4 ++ posts-md/board-game-travel-kit.md | 12 +--- posts-md/cardboard-mail-holders.md | 2 +- ...rolling-a-computercraft-turtle-remotely.md | 2 +- posts-md/default-twitter-icons.md | 4 +- posts-md/diy-hard-drive-carrying-case.md | 4 +- .../diy-keyboards-and-how-keyboards-work.md | 16 +++-- posts-md/e-ink-laptop.md | 48 +++++---------- posts-md/hack-a-day-day-04-lashed-table.md | 4 +- posts-md/hack-a-day-day-06.md | 4 ++ posts-md/hack-a-day-day-2-raytracing.md | 9 +-- posts-md/hack-a-day-day-22-homemade-pcbs.md | 8 +++ posts-md/hack-a-day-hack-a-clock.md | 4 +- posts-md/irc.md | 2 +- posts-md/meeple-initiative-tracker.md | 4 +- posts-md/money-orders.md | 2 +- posts-md/moreorcs-com.md | 2 +- posts-md/multi-universe-rpg-toy.md | 2 +- posts-md/my-todo-list.md | 4 ++ posts-md/painting.md | 20 ++++--- posts-md/pixel-alphabet.md | 2 +- posts-md/pixel-art-a-cool-cat.md | 2 +- posts-md/printable-todo-list.md | 8 +-- posts-md/repulsive-dots.md | 8 ++- posts-md/roasted-chickpeas.md | 2 +- posts-md/scan-organizer.md | 12 ++-- posts-md/steak-tartare-3.md | 2 +- posts-md/the-double-lives-of-books.md | 6 +- posts-md/tiny-cute-vampire-bat.md | 2 +- posts-md/whiteboard-partition.md | 8 +-- posts-md/whoosh.md | 2 +- posts-md/whsh.md | 2 +- posts-md/wip-dead-tree-publishing-2.md | 2 +- posts-md/wip-dead-tree-publishing-3.md | 2 +- posts-md/wip-dead-tree-publishing-4.md | 2 +- posts-md/wip-dead-tree-publishing.md | 4 +- posts-md/zorchpad-keyboard-update.md | 2 +- 54 files changed, 209 insertions(+), 235 deletions(-) diff --git a/html2markdown.js b/html2markdown.js index 1584a41..73dbb37 100644 --- a/html2markdown.js +++ b/html2markdown.js @@ -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) diff --git a/markdown2html.py b/markdown2html.py index 69b9fa8..5b3e6e4 100644 --- a/markdown2html.py +++ b/markdown2html.py @@ -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() diff --git a/package-lock.json b/package-lock.json index 7bea45e..09319c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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": { @@ -47,12 +64,6 @@ "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", @@ -1062,21 +1073,6 @@ "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", @@ -1182,13 +1178,8 @@ "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", @@ -1222,16 +1213,6 @@ "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", diff --git a/package.json b/package.json index 77958dd..c23e4ee 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,6 @@ "dependencies": { "joplin-turndown-plugin-gfm": "^1.0.12", "puppeteer": "^22.13.0", - "turndown": "^7.2.0" + "turndown": "file:../turndown" } } diff --git a/posts-html/android-backup-on-arch-linux.html b/posts-html/android-backup-on-arch-linux.html index 2c2cb09..2f4f4df 100644 --- a/posts-html/android-backup-on-arch-linux.html +++ b/posts-html/android-backup-on-arch-linux.html @@ -35,8 +35,3 @@ wordpress_slug: android-backup-on-arch-linux -
    -
  1. -

    Pingback: Backup android on plugin | Optimal Prime

    -
  2. -
\ No newline at end of file diff --git a/posts-html/backup-android-on-plugin.html b/posts-html/backup-android-on-plugin.html index deb6304..01f23dc 100644 --- a/posts-html/backup-android-on-plugin.html +++ b/posts-html/backup-android-on-plugin.html @@ -76,11 +76,3 @@ fusermount -u /media/android -
    -
  1. -

    Pingback: Android backup on arch linux | Optimal Prime

    -
  2. -
  3. -

    Pingback: Year in Review | Optimal Prime

    -
  4. -
\ No newline at end of file diff --git a/posts-html/installing-email-with-postfix-and-dovecot.html b/posts-html/installing-email-with-postfix-and-dovecot.html index 8b408b1..ff64e1d 100644 --- a/posts-html/installing-email-with-postfix-and-dovecot.html +++ b/posts-html/installing-email-with-postfix-and-dovecot.html @@ -338,9 +338,7 @@ non_smtpd_milters = inet:localhost:12345
    -
  1. -

    Pingback: Mail filtering with Dovecot - Optimal Prime

    -
  2. +
  3. diff --git a/posts-html/irc.html b/posts-html/irc.html index b599b43..d5aa33f 100644 --- a/posts-html/irc.html +++ b/posts-html/irc.html @@ -31,8 +31,3 @@ wordpress_slug: irc
    -
      -
    1. -

      Pingback: Year in Review | Optimal Prime

      -
    2. -
    \ No newline at end of file diff --git a/posts-html/setting-up-ssl-certificates-using-startssl.html b/posts-html/setting-up-ssl-certificates-using-startssl.html index bb6c87e..36b186c 100644 --- a/posts-html/setting-up-ssl-certificates-using-startssl.html +++ b/posts-html/setting-up-ssl-certificates-using-startssl.html @@ -46,8 +46,3 @@ chmod 700 ${DOMAIN}.full.pem
    -
      -
    1. -

      Pingback: Installing email with Postfix and Dovecot (with Postgres) - Optimal Prime

      -
    2. -
    \ No newline at end of file diff --git a/posts-html/the-double-lives-of-books.html b/posts-html/the-double-lives-of-books.html index 1a07d9c..00293e7 100644 --- a/posts-html/the-double-lives-of-books.html +++ b/posts-html/the-double-lives-of-books.html @@ -36,8 +36,3 @@ wordpress_slug: the-double-lives-of-books -
      -
    1. -

      Pingback: Paper archival | Optimal Prime

      -
    2. -
    \ No newline at end of file diff --git a/posts-html/whiteboard-partition.html b/posts-html/whiteboard-partition.html index 178d8ff..82d2a7a 100644 --- a/posts-html/whiteboard-partition.html +++ b/posts-html/whiteboard-partition.html @@ -24,8 +24,3 @@ wordpress_slug: whiteboard-partition -
      -
    1. -

      Pingback: Year in Review | Optimal Prime

      -
    2. -
    \ No newline at end of file diff --git a/posts-html/wip-dead-tree-publishing-2.html b/posts-html/wip-dead-tree-publishing-2.html index 4cf4bd3..1c02ffc 100644 --- a/posts-html/wip-dead-tree-publishing-2.html +++ b/posts-html/wip-dead-tree-publishing-2.html @@ -24,8 +24,3 @@ wordpress_slug: wip-dead-tree-publishing-2 -
      -
    1. -

      Pingback: WIP: Dead Tree Publishing 3 | Optimal Prime

      -
    2. -
    \ No newline at end of file diff --git a/posts-html/wip-dead-tree-publishing.html b/posts-html/wip-dead-tree-publishing.html index bcd3e72..f31b821 100644 --- a/posts-html/wip-dead-tree-publishing.html +++ b/posts-html/wip-dead-tree-publishing.html @@ -29,8 +29,3 @@ wordpress_slug: wip-dead-tree-publishing -
      -
    1. -

      Pingback: WIP: Dead Tree Publishing 2 | Optimal Prime

      -
    2. -
    \ No newline at end of file diff --git a/posts-md/2020-books.md b/posts-md/2020-books.md index 43fde3e..9dcf639 100644 --- a/posts-md/2020-books.md +++ b/posts-md/2020-books.md @@ -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) diff --git a/posts-md/2021-books.md b/posts-md/2021-books.md index 4bcfbb0..3a588e7 100644 --- a/posts-md/2021-books.md +++ b/posts-md/2021-books.md @@ -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 diff --git a/posts-md/2022-books.md b/posts-md/2022-books.md index 3748f40..141fb6d 100644 --- a/posts-md/2022-books.md +++ b/posts-md/2022-books.md @@ -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 diff --git a/posts-md/a-pixel-art.md b/posts-md/a-pixel-art.md index fdeb52d..ea3910f 100644 --- a/posts-md/a-pixel-art.md +++ b/posts-md/a-pixel-art.md @@ -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) diff --git a/posts-md/banh-chung.md b/posts-md/banh-chung.md index 91c8bf6..e4f81f3 100644 --- a/posts-md/banh-chung.md +++ b/posts-md/banh-chung.md @@ -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) + + 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. diff --git a/posts-md/board-game-travel-kit.md b/posts-md/board-game-travel-kit.md index bb2a160..c4fee51 100644 --- a/posts-md/board-game-travel-kit.md +++ b/posts-md/board-game-travel-kit.md @@ -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) diff --git a/posts-md/cardboard-mail-holders.md b/posts-md/cardboard-mail-holders.md index 1376384..e7d19d4 100644 --- a/posts-md/cardboard-mail-holders.md +++ b/posts-md/cardboard-mail-holders.md @@ -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. diff --git a/posts-md/controlling-a-computercraft-turtle-remotely.md b/posts-md/controlling-a-computercraft-turtle-remotely.md index d3d007e..21abf1f 100644 --- a/posts-md/controlling-a-computercraft-turtle-remotely.md +++ b/posts-md/controlling-a-computercraft-turtle-remotely.md @@ -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 diff --git a/posts-md/default-twitter-icons.md b/posts-md/default-twitter-icons.md index ac9860d..956f8e4 100644 --- a/posts-md/default-twitter-icons.md +++ b/posts-md/default-twitter-icons.md @@ -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) diff --git a/posts-md/diy-hard-drive-carrying-case.md b/posts-md/diy-hard-drive-carrying-case.md index c5b9a48..4664ef9 100644 --- a/posts-md/diy-hard-drive-carrying-case.md +++ b/posts-md/diy-hard-drive-carrying-case.md @@ -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) diff --git a/posts-md/diy-keyboards-and-how-keyboards-work.md b/posts-md/diy-keyboards-and-how-keyboards-work.md index 71214f4..4c49ea3 100644 --- a/posts-md/diy-keyboards-and-how-keyboards-work.md +++ b/posts-md/diy-keyboards-and-how-keyboards-work.md @@ -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. + + 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. + diff --git a/posts-md/e-ink-laptop.md b/posts-md/e-ink-laptop.md index 3216304..eb29699 100644 --- a/posts-md/e-ink-laptop.md +++ b/posts-md/e-ink-laptop.md @@ -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. + -[![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: diff --git a/posts-md/hack-a-day-day-04-lashed-table.md b/posts-md/hack-a-day-day-04-lashed-table.md index 6e59d13..47e410e 100644 --- a/posts-md/hack-a-day-day-04-lashed-table.md +++ b/posts-md/hack-a-day-day-04-lashed-table.md @@ -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. diff --git a/posts-md/hack-a-day-day-06.md b/posts-md/hack-a-day-day-06.md index cec7b44..4c80a29 100644 --- a/posts-md/hack-a-day-day-06.md +++ b/posts-md/hack-a-day-day-06.md @@ -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. + + 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. diff --git a/posts-md/hack-a-day-day-2-raytracing.md b/posts-md/hack-a-day-day-2-raytracing.md index bacfb9c..98cc52f 100644 --- a/posts-md/hack-a-day-day-2-raytracing.md +++ b/posts-md/hack-a-day-day-2-raytracing.md @@ -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) diff --git a/posts-md/hack-a-day-day-22-homemade-pcbs.md b/posts-md/hack-a-day-day-22-homemade-pcbs.md index c54922f..ad0aa5f 100644 --- a/posts-md/hack-a-day-day-22-homemade-pcbs.md +++ b/posts-md/hack-a-day-day-22-homemade-pcbs.md @@ -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. + + 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. + + 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. diff --git a/posts-md/hack-a-day-hack-a-clock.md b/posts-md/hack-a-day-hack-a-clock.md index eaaa3c9..04bfaa9 100644 --- a/posts-md/hack-a-day-hack-a-clock.md +++ b/posts-md/hack-a-day-hack-a-clock.md @@ -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. diff --git a/posts-md/irc.md b/posts-md/irc.md index 3599d8e..b0459b1 100644 --- a/posts-md/irc.md +++ b/posts-md/irc.md @@ -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 diff --git a/posts-md/meeple-initiative-tracker.md b/posts-md/meeple-initiative-tracker.md index b6d6cdd..0a159a6 100644 --- a/posts-md/meeple-initiative-tracker.md +++ b/posts-md/meeple-initiative-tracker.md @@ -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. diff --git a/posts-md/money-orders.md b/posts-md/money-orders.md index 3347ab0..afe7602 100644 --- a/posts-md/money-orders.md +++ b/posts-md/money-orders.md @@ -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 diff --git a/posts-md/moreorcs-com.md b/posts-md/moreorcs-com.md index 40d2db9..38ee368 100644 --- a/posts-md/moreorcs-com.md +++ b/posts-md/moreorcs-com.md @@ -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/) diff --git a/posts-md/multi-universe-rpg-toy.md b/posts-md/multi-universe-rpg-toy.md index 112c541..0e9f084 100644 --- a/posts-md/multi-universe-rpg-toy.md +++ b/posts-md/multi-universe-rpg-toy.md @@ -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: diff --git a/posts-md/my-todo-list.md b/posts-md/my-todo-list.md index 17b9dfc..e1f8463 100644 --- a/posts-md/my-todo-list.md +++ b/posts-md/my-todo-list.md @@ -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. + + **A yearly goals list** A yearly list of my goals for the year. I typically have 5-15 goals, and finish half of them. diff --git a/posts-md/painting.md b/posts-md/painting.md index 725f868..1c7d361 100644 --- a/posts-md/painting.md +++ b/posts-md/painting.md @@ -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) + -Bouquet, Z Vance 2023 + -[![](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) + diff --git a/posts-md/pixel-alphabet.md b/posts-md/pixel-alphabet.md index 7890a6d..0b71a05 100644 --- a/posts-md/pixel-alphabet.md +++ b/posts-md/pixel-alphabet.md @@ -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. diff --git a/posts-md/pixel-art-a-cool-cat.md b/posts-md/pixel-art-a-cool-cat.md index 8ea0546..1189549 100644 --- a/posts-md/pixel-art-a-cool-cat.md +++ b/posts-md/pixel-art-a-cool-cat.md @@ -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) diff --git a/posts-md/printable-todo-list.md b/posts-md/printable-todo-list.md index f6049dd..3cc445f 100644 --- a/posts-md/printable-todo-list.md +++ b/posts-md/printable-todo-list.md @@ -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) diff --git a/posts-md/repulsive-dots.md b/posts-md/repulsive-dots.md index ff06c85..3f279c0 100644 --- a/posts-md/repulsive-dots.md +++ b/posts-md/repulsive-dots.md @@ -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. + -[![](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! diff --git a/posts-md/roasted-chickpeas.md b/posts-md/roasted-chickpeas.md index 841ad5b..2fb22fa 100644 --- a/posts-md/roasted-chickpeas.md +++ b/posts-md/roasted-chickpeas.md @@ -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 diff --git a/posts-md/scan-organizer.md b/posts-md/scan-organizer.md index 3f27599..018e166 100644 --- a/posts-md/scan-organizer.md +++ b/posts-md/scan-organizer.md @@ -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. diff --git a/posts-md/steak-tartare-3.md b/posts-md/steak-tartare-3.md index d451c78..9fada9e 100644 --- a/posts-md/steak-tartare-3.md +++ b/posts-md/steak-tartare-3.md @@ -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: diff --git a/posts-md/the-double-lives-of-books.md b/posts-md/the-double-lives-of-books.md index 51555f5..8a299fc 100644 --- a/posts-md/the-double-lives-of-books.md +++ b/posts-md/the-double-lives-of-books.md @@ -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 diff --git a/posts-md/tiny-cute-vampire-bat.md b/posts-md/tiny-cute-vampire-bat.md index 3eb62cb..5c794b3 100644 --- a/posts-md/tiny-cute-vampire-bat.md +++ b/posts-md/tiny-cute-vampire-bat.md @@ -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/) diff --git a/posts-md/whiteboard-partition.md b/posts-md/whiteboard-partition.md index 93fe08c..9150204 100644 --- a/posts-md/whiteboard-partition.md +++ b/posts-md/whiteboard-partition.md @@ -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 diff --git a/posts-md/whoosh.md b/posts-md/whoosh.md index ac4c2ed..fad9a33 100644 --- a/posts-md/whoosh.md +++ b/posts-md/whoosh.md @@ -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 diff --git a/posts-md/whsh.md b/posts-md/whsh.md index f15bf4f..9fd196c 100644 --- a/posts-md/whsh.md +++ b/posts-md/whsh.md @@ -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. diff --git a/posts-md/wip-dead-tree-publishing-2.md b/posts-md/wip-dead-tree-publishing-2.md index 8d81035..73c25ac 100644 --- a/posts-md/wip-dead-tree-publishing-2.md +++ b/posts-md/wip-dead-tree-publishing-2.md @@ -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. diff --git a/posts-md/wip-dead-tree-publishing-3.md b/posts-md/wip-dead-tree-publishing-3.md index 386a1ca..24947d5 100644 --- a/posts-md/wip-dead-tree-publishing-3.md +++ b/posts-md/wip-dead-tree-publishing-3.md @@ -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 diff --git a/posts-md/wip-dead-tree-publishing-4.md b/posts-md/wip-dead-tree-publishing-4.md index a87817f..3c98b90 100644 --- a/posts-md/wip-dead-tree-publishing-4.md +++ b/posts-md/wip-dead-tree-publishing-4.md @@ -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 diff --git a/posts-md/wip-dead-tree-publishing.md b/posts-md/wip-dead-tree-publishing.md index 4d0dad8..eceb0b1 100644 --- a/posts-md/wip-dead-tree-publishing.md +++ b/posts-md/wip-dead-tree-publishing.md @@ -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 diff --git a/posts-md/zorchpad-keyboard-update.md b/posts-md/zorchpad-keyboard-update.md index 3ac7fc9..896b8ae 100644 --- a/posts-md/zorchpad-keyboard-update.md +++ b/posts-md/zorchpad-keyboard-update.md @@ -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: -- 2.47.3