add files - www.codemadness.org - www.codemadness.org saait content files
(HTM) git clone git://git.codemadness.org/www.codemadness.org
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 47022e7faf705fa6125141b4c287ad0cd6b33b2a
(DIR) parent b161469566524336ec669af12ec1fd5c312dfdf0
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Thu, 11 Aug 2022 13:43:59 +0200
add files
Diffstat:
A output/2fa-totp.html | 98 +++++++++++++++++++++++++++++++
A output/2fa-totp.md | 57 +++++++++++++++++++++++++++++++
A output/downloads/2fa/qr.png | 0
A output/openbsd-riscv64-vm.html | 128 +++++++++++++++++++++++++++++++
A output/openbsd-riscv64-vm.md | 79 +++++++++++++++++++++++++++++++
A output/phlog/2fa-totp | 65 +++++++++++++++++++++++++++++++
A output/phlog/openbsd-riscv64-vm | 87 +++++++++++++++++++++++++++++++
A output/phlog/rss | 252 +++++++++++++++++++++++++++++++
A output/phlog/todo | 2 ++
A output/phlog/todo-application | 104 +++++++++++++++++++++++++++++++
A output/phlog/totp | 65 +++++++++++++++++++++++++++++++
A output/todo-application.html | 126 +++++++++++++++++++++++++++++++
A output/todo-application.md | 96 +++++++++++++++++++++++++++++++
A output/todo.html | 2 ++
A output/totp.html | 98 +++++++++++++++++++++++++++++++
A output/totp.md | 57 +++++++++++++++++++++++++++++++
A pages/todo-application.cfg | 6 ++++++
A pages/todo-application.md | 96 +++++++++++++++++++++++++++++++
A pages/totp.cfg | 6 ++++++
A pages/totp.md | 57 +++++++++++++++++++++++++++++++
20 files changed, 1481 insertions(+), 0 deletions(-)
---
(DIR) diff --git a/output/2fa-totp.html b/output/2fa-totp.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html dir="ltr" lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width" />
+ <meta name="keywords" content="oauthtool, zbarimg, totp, 2FA, authenticator" />
+ <meta name="description" content="Using 2FA TOTP without crappy authenticator apps" />
+ <meta name="author" content="Hiltjo" />
+ <meta name="generator" content="Static content generated using saait: https://codemadness.org/saait.html" />
+ <title>2FA TOTP without crappy authenticator apps - Codemadness</title>
+ <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
+ <link rel="stylesheet" href="print.css" type="text/css" media="print" />
+ <link rel="alternate" href="atom.xml" type="application/atom+xml" title="Codemadness Atom Feed" />
+ <link rel="alternate" href="atom_content.xml" type="application/atom+xml" title="Codemadness Atom Feed with content" />
+ <link rel="icon" href="/favicon.png" type="image/png" />
+</head>
+<body>
+ <nav id="menuwrap">
+ <table id="menu" width="100%" border="0">
+ <tr>
+ <td id="links" align="left">
+ <a href="index.html">Blog</a> |
+ <a href="/git/" title="Git repository with some of my projects">Git</a> |
+ <a href="/releases/">Releases</a> |
+ <a href="gopher://codemadness.org">Gopherhole</a>
+ </td>
+ <td id="links-contact" align="right">
+ <span class="hidden"> | </span>
+ <a href="feeds.html">Feeds</a> |
+ <a href="pgp.asc">PGP</a> |
+ <a href="mailto:hiltjo@AT@codemadness.DOT.org">Mail</a>
+ </td>
+ </tr>
+ </table>
+ </nav>
+ <hr class="hidden" />
+ <main id="mainwrap">
+ <div id="main">
+ <article>
+<header>
+ <h1>2FA TOTP without crappy authenticator apps</h1>
+ <p>
+ <strong>Last modification on </strong> <time>2022-03-23</time>
+ </p>
+</header>
+
+<p>This describes how to use 2FA without using crappy authenticator "apps" or a
+mobile device.</p>
+<h2>Install</h2>
+<p>On OpenBSD:</p>
+<pre><code>pkg_add oath-toolkit zbar
+</code></pre>
+<ul>
+<li>oath-toolkit is used to generate the digits based on the secret key.</li>
+<li>zbar is used to scan the QR code text.</li>
+</ul>
+<h2>Steps</h2>
+<p>Save the QR code image from the authenticator app, website to an image file.
+Scan the QR code text from the image:</p>
+<pre><code>zbarimg image.png
+</code></pre>
+<p>An example QR code:</p>
+<p><img src="downloads/2fa/qr.png" alt="QR code example" /></p>
+<p>The output is typically something like:</p>
+<pre><code>QR-Code:otpauth://totp/Example:someuser@codemadness.org?secret=SECRETKEY&issuer=Codemadness
+</code></pre>
+<p>You only need to scan this QR-code for the secret key once.
+Make sure to store the secret key in a private safe place and don't show it to
+anyone else.</p>
+<p>Using the secret key the following command outputs a 6-digit code by default.
+In this example we also assume the key is base32-encoded.
+There can be other parameters and options, this is documented in the Yubico URI
+string format reference below.</p>
+<p>Command:</p>
+<pre><code>oathtool --totp -b SOMEKEY
+</code></pre>
+<ul>
+<li>The --totp option uses the time-variant TOTP mode, by default it uses HMAC SHA1.</li>
+<li>The -b option use base32 encoding of KEY instead of hex.</li>
+</ul>
+<p>Tip: you can create a script that automatically puts the digits in the
+clipboard, for example:</p>
+<pre><code>oathtool --totp -b SOMEKEY | xclip
+</code></pre>
+<h2>References</h2>
+<ul>
+<li><a href="https://linux.die.net/man/1/zbarimg">zbarimg(1) man page</a></li>
+<li><a href="https://www.nongnu.org/oath-toolkit/man-oathtool.html">oathtool(1) man page</a></li>
+<li><a href="https://datatracker.ietf.org/doc/html/rfc6238">RFC6238 - TOTP: Time-Based One-Time Password Algorithm</a></li>
+<li><a href="https://docs.yubico.com/yesdk/users-manual/application-oath/uri-string-format.html">Yucibo.com - otpauth URI string format</a></li>
+</ul>
+
+ </article>
+ </div>
+ </main>
+</body>
+</html>
(DIR) diff --git a/output/2fa-totp.md b/output/2fa-totp.md
@@ -0,0 +1,57 @@
+This describes how to use 2FA without using crappy authenticator "apps" or a
+mobile device.
+
+
+## Install
+
+On OpenBSD:
+
+ pkg_add oath-toolkit zbar
+
+* oath-toolkit is used to generate the digits based on the secret key.
+* zbar is used to scan the QR code text.
+
+
+## Steps
+
+Save the QR code image from the authenticator app, website to an image file.
+Scan the QR code text from the image:
+
+ zbarimg image.png
+
+An example QR code:
+
+
+
+The output is typically something like:
+
+ QR-Code:otpauth://totp/Example:someuser@codemadness.org?secret=SECRETKEY&issuer=Codemadness
+
+You only need to scan this QR-code for the secret key once.
+Make sure to store the secret key in a private safe place and don't show it to
+anyone else.
+
+Using the secret key the following command outputs a 6-digit code by default.
+In this example we also assume the key is base32-encoded.
+There can be other parameters and options, this is documented in the Yubico URI
+string format reference below.
+
+Command:
+
+ oathtool --totp -b SOMEKEY
+
+* The --totp option uses the time-variant TOTP mode, by default it uses HMAC SHA1.
+* The -b option use base32 encoding of KEY instead of hex.
+
+Tip: you can create a script that automatically puts the digits in the
+clipboard, for example:
+
+ oathtool --totp -b SOMEKEY | xclip
+
+
+## References
+
+* [zbarimg(1) man page](https://linux.die.net/man/1/zbarimg)
+* [oathtool(1) man page](https://www.nongnu.org/oath-toolkit/man-oathtool.html)
+* [RFC6238 - TOTP: Time-Based One-Time Password Algorithm](https://datatracker.ietf.org/doc/html/rfc6238)
+* [Yucibo.com - otpauth URI string format](https://docs.yubico.com/yesdk/users-manual/application-oath/uri-string-format.html)
(DIR) diff --git a/output/downloads/2fa/qr.png b/output/downloads/2fa/qr.png
Binary files differ.
(DIR) diff --git a/output/openbsd-riscv64-vm.html b/output/openbsd-riscv64-vm.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<html dir="ltr" lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width" />
+ <meta name="keywords" content="OpenBSD, RISCV64, RISC-V, QEMU, vm" />
+ <meta name="description" content="Setup an OpenBSD RISCV-64 VM in QEMU" />
+ <meta name="author" content="Hiltjo" />
+ <meta name="generator" content="Static content generated using saait: https://codemadness.org/saait.html" />
+ <title>Setup an OpenBSD RISCV64 VM in QEMU - Codemadness</title>
+ <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
+ <link rel="stylesheet" href="print.css" type="text/css" media="print" />
+ <link rel="alternate" href="atom.xml" type="application/atom+xml" title="Codemadness Atom Feed" />
+ <link rel="alternate" href="atom_content.xml" type="application/atom+xml" title="Codemadness Atom Feed with content" />
+ <link rel="icon" href="/favicon.png" type="image/png" />
+</head>
+<body>
+ <nav id="menuwrap">
+ <table id="menu" width="100%" border="0">
+ <tr>
+ <td id="links" align="left">
+ <a href="index.html">Blog</a> |
+ <a href="/git/" title="Git repository with some of my projects">Git</a> |
+ <a href="/releases/">Releases</a> |
+ <a href="gopher://codemadness.org">Gopherhole</a>
+ </td>
+ <td id="links-contact" align="right">
+ <span class="hidden"> | </span>
+ <a href="feeds.html">Feeds</a> |
+ <a href="pgp.asc">PGP</a> |
+ <a href="mailto:hiltjo@AT@codemadness.DOT.org">Mail</a>
+ </td>
+ </tr>
+ </table>
+ </nav>
+ <hr class="hidden" />
+ <main id="mainwrap">
+ <div id="main">
+ <article>
+<header>
+ <h1>Setup an OpenBSD RISCV64 VM in QEMU</h1>
+ <p>
+ <strong>Last modification on </strong> <time>2021-10-26</time>
+ </p>
+</header>
+
+<p>This describes how to setup an OpenBSD RISCV64 VM in QEMU.</p>
+<p>The shellscript below does the following:</p>
+<ul>
+<li>Set up the disk image (raw format).</li>
+<li>Patch the disk image with the OpenBSD miniroot file for the installation.</li>
+<li>Downloads the opensbi and u-boot firmware files for qemu.</li>
+<li>Run the VM with the supported settings.</li>
+</ul>
+<p>The script is tested on the host GNU/Void Linux and OpenBSD-current.</p>
+<p><strong>IMPORTANT!: The signature and checksum for the miniroot, u-boot and opensbi
+files are not verified. If the host is OpenBSD make sure to instead install the
+packages (pkg_add u-boot-riscv64 opensbi) and adjust the firmware path for the
+qemu -bios and -kernel options. </strong></p>
+<h2>Shellscript</h2>
+<pre><code>#!/bin/sh
+# mirror list: https://www.openbsd.org/ftp.html
+mirror="https://ftp.bit.nl/pub/OpenBSD/"
+release="7.0"
+minirootname="miniroot70.img"
+
+miniroot() {
+ test -f "${minirootname}" && return # download once
+
+ url="${mirror}/${release}/riscv64/${minirootname}"
+ curl -o "${minirootname}" "${url}"
+}
+
+createrootdisk() {
+ test -f disk.raw && return # create once
+ qemu-img create disk.raw 10G # create 10 GB disk
+ dd conv=notrunc if=${minirootname} of=disk.raw # write miniroot to disk
+}
+
+opensbi() {
+ f="opensbi.tgz"
+ test -f "${f}" && return # download and extract once.
+
+ url="${mirror}/${release}/packages/amd64/opensbi-0.9p0.tgz"
+ curl -o "${f}" "${url}"
+
+ tar -xzf "${f}" share/opensbi/generic/fw_jump.bin
+}
+
+uboot() {
+ f="uboot.tgz"
+ test -f "${f}" && return # download and extract once.
+
+ url="${mirror}/${release}/packages/amd64/u-boot-riscv64-2021.07p0.tgz"
+ curl -o "${f}" "${url}"
+
+ tar -xzf "${f}" share/u-boot/qemu-riscv64_smode/u-boot.bin
+}
+
+setup() {
+ miniroot
+ createrootdisk
+ opensbi
+ uboot
+}
+
+run() {
+ qemu-system-riscv64 \
+ -machine virt \
+ -nographic \
+ -m 2048M \
+ -smp 2 \
+ -bios share/opensbi/generic/fw_jump.bin \
+ -kernel share/u-boot/qemu-riscv64_smode/u-boot.bin \
+ -drive file=disk.raw,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 \
+ -netdev user,id=net0,ipv6=off -device virtio-net-device,netdev=net0
+}
+
+setup
+run
+</code></pre>
+
+ </article>
+ </div>
+ </main>
+</body>
+</html>
(DIR) diff --git a/output/openbsd-riscv64-vm.md b/output/openbsd-riscv64-vm.md
@@ -0,0 +1,79 @@
+This describes how to setup an OpenBSD RISCV64 VM in QEMU.
+
+The shellscript below does the following:
+
+* Set up the disk image (raw format).
+* Patch the disk image with the OpenBSD miniroot file for the installation.
+* Downloads the opensbi and u-boot firmware files for qemu.
+* Run the VM with the supported settings.
+
+The script is tested on the host GNU/Void Linux and OpenBSD-current.
+
+**IMPORTANT!: The signature and checksum for the miniroot, u-boot and opensbi
+files are not verified. If the host is OpenBSD make sure to instead install the
+packages (pkg_add u-boot-riscv64 opensbi) and adjust the firmware path for the
+qemu -bios and -kernel options. **
+
+
+## Shellscript
+
+ #!/bin/sh
+ # mirror list: https://www.openbsd.org/ftp.html
+ mirror="https://ftp.bit.nl/pub/OpenBSD/"
+ release="7.0"
+ minirootname="miniroot70.img"
+
+ miniroot() {
+ test -f "${minirootname}" && return # download once
+
+ url="${mirror}/${release}/riscv64/${minirootname}"
+ curl -o "${minirootname}" "${url}"
+ }
+
+ createrootdisk() {
+ test -f disk.raw && return # create once
+ qemu-img create disk.raw 10G # create 10 GB disk
+ dd conv=notrunc if=${minirootname} of=disk.raw # write miniroot to disk
+ }
+
+ opensbi() {
+ f="opensbi.tgz"
+ test -f "${f}" && return # download and extract once.
+
+ url="${mirror}/${release}/packages/amd64/opensbi-0.9p0.tgz"
+ curl -o "${f}" "${url}"
+
+ tar -xzf "${f}" share/opensbi/generic/fw_jump.bin
+ }
+
+ uboot() {
+ f="uboot.tgz"
+ test -f "${f}" && return # download and extract once.
+
+ url="${mirror}/${release}/packages/amd64/u-boot-riscv64-2021.07p0.tgz"
+ curl -o "${f}" "${url}"
+
+ tar -xzf "${f}" share/u-boot/qemu-riscv64_smode/u-boot.bin
+ }
+
+ setup() {
+ miniroot
+ createrootdisk
+ opensbi
+ uboot
+ }
+
+ run() {
+ qemu-system-riscv64 \
+ -machine virt \
+ -nographic \
+ -m 2048M \
+ -smp 2 \
+ -bios share/opensbi/generic/fw_jump.bin \
+ -kernel share/u-boot/qemu-riscv64_smode/u-boot.bin \
+ -drive file=disk.raw,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 \
+ -netdev user,id=net0,ipv6=off -device virtio-net-device,netdev=net0
+ }
+
+ setup
+ run
(DIR) diff --git a/output/phlog/2fa-totp b/output/phlog/2fa-totp
@@ -0,0 +1,65 @@
+1<- Back / codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i# 2FA TOTP without crappy authenticator apps codemadness.org 70
+i codemadness.org 70
+iLast modification on 2022-03-23 codemadness.org 70
+i codemadness.org 70
+iThis describes how to use 2FA without using crappy authenticator "apps" or a codemadness.org 70
+imobile device. codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## Install codemadness.org 70
+i codemadness.org 70
+iOn OpenBSD: codemadness.org 70
+i codemadness.org 70
+i pkg_add oath-toolkit zbar codemadness.org 70
+i codemadness.org 70
+i* oath-toolkit is used to generate the digits based on the secret key. codemadness.org 70
+i* zbar is used to scan the QR code text. codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## Steps codemadness.org 70
+i codemadness.org 70
+iSave the QR code image from the authenticator app, website to an image file. codemadness.org 70
+iScan the QR code text from the image: codemadness.org 70
+i codemadness.org 70
+i zbarimg image.png codemadness.org 70
+i codemadness.org 70
+iAn example QR code: codemadness.org 70
+i codemadness.org 70
+IQR code example /downloads/2fa/qr.png codemadness.org 70
+i codemadness.org 70
+iThe output is typically something like: codemadness.org 70
+i codemadness.org 70
+i QR-Code:otpauth://totp/Example:someuser@codemadness.org?secret=SECRETKEY&issuer=Codemadness codemadness.org 70
+i codemadness.org 70
+iYou only need to scan this QR-code for the secret key once. codemadness.org 70
+iMake sure to store the secret key in a private safe place and don't show it to codemadness.org 70
+ianyone else. codemadness.org 70
+i codemadness.org 70
+iUsing the secret key the following command outputs a 6-digit code by default. codemadness.org 70
+iIn this example we also assume the key is base32-encoded. codemadness.org 70
+iThere can be other parameters and options, this is documented in the Yubico URI codemadness.org 70
+istring format reference below. codemadness.org 70
+i codemadness.org 70
+iCommand: codemadness.org 70
+i codemadness.org 70
+i oathtool --totp -b SOMEKEY codemadness.org 70
+i codemadness.org 70
+i* The --totp option uses the time-variant TOTP mode, by default it uses HMAC SHA1. codemadness.org 70
+i* The -b option use base32 encoding of KEY instead of hex. codemadness.org 70
+i codemadness.org 70
+iTip: you can create a script that automatically puts the digits in the codemadness.org 70
+iclipboard, for example: codemadness.org 70
+i codemadness.org 70
+i oathtool --totp -b SOMEKEY | xclip codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## References codemadness.org 70
+i codemadness.org 70
+h* zbarimg(1) man page URL:https://linux.die.net/man/1/zbarimg codemadness.org 70
+h* oathtool(1) man page URL:https://www.nongnu.org/oath-toolkit/man-oathtool.html codemadness.org 70
+h* RFC6238 - TOTP: Time-Based One-Time Password Algorithm URL:https://datatracker.ietf.org/doc/html/rfc6238 codemadness.org 70
+h* Yucibo.com - otpauth URI string format URL:https://docs.yubico.com/yesdk/users-manual/application-oath/uri-string-format.html codemadness.org 70
+.
(DIR) diff --git a/output/phlog/openbsd-riscv64-vm b/output/phlog/openbsd-riscv64-vm
@@ -0,0 +1,87 @@
+1<- Back / codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i# Setup an OpenBSD RISCV64 VM in QEMU codemadness.org 70
+i codemadness.org 70
+iLast modification on 2021-10-26 codemadness.org 70
+i codemadness.org 70
+iThis describes how to setup an OpenBSD RISCV64 VM in QEMU. codemadness.org 70
+i codemadness.org 70
+iThe shellscript below does the following: codemadness.org 70
+i codemadness.org 70
+i* Set up the disk image (raw format). codemadness.org 70
+i* Patch the disk image with the OpenBSD miniroot file for the installation. codemadness.org 70
+i* Downloads the opensbi and u-boot firmware files for qemu. codemadness.org 70
+i* Run the VM with the supported settings. codemadness.org 70
+i codemadness.org 70
+iThe script is tested on the host GNU/Void Linux and OpenBSD-current. codemadness.org 70
+i codemadness.org 70
+i**IMPORTANT!: The signature and checksum for the miniroot, u-boot and opensbi codemadness.org 70
+ifiles are not verified. If the host is OpenBSD make sure to instead install the codemadness.org 70
+ipackages (pkg_add u-boot-riscv64 opensbi) and adjust the firmware path for the codemadness.org 70
+iqemu -bios and -kernel options. ** codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## Shellscript codemadness.org 70
+i codemadness.org 70
+i #!/bin/sh codemadness.org 70
+i # mirror list: https://www.openbsd.org/ftp.html codemadness.org 70
+i mirror="https://ftp.bit.nl/pub/OpenBSD/" codemadness.org 70
+i release="7.0" codemadness.org 70
+i minirootname="miniroot70.img" codemadness.org 70
+i codemadness.org 70
+i miniroot() { codemadness.org 70
+i test -f "${minirootname}" && return # download once codemadness.org 70
+i codemadness.org 70
+i url="${mirror}/${release}/riscv64/${minirootname}" codemadness.org 70
+i curl -o "${minirootname}" "${url}" codemadness.org 70
+i } codemadness.org 70
+i codemadness.org 70
+i createrootdisk() { codemadness.org 70
+i test -f disk.raw && return # create once codemadness.org 70
+i qemu-img create disk.raw 10G # create 10 GB disk codemadness.org 70
+i dd conv=notrunc if=${minirootname} of=disk.raw # write miniroot to disk codemadness.org 70
+i } codemadness.org 70
+i codemadness.org 70
+i opensbi() { codemadness.org 70
+i f="opensbi.tgz" codemadness.org 70
+i test -f "${f}" && return # download and extract once. codemadness.org 70
+i codemadness.org 70
+i url="${mirror}/${release}/packages/amd64/opensbi-0.9p0.tgz" codemadness.org 70
+i curl -o "${f}" "${url}" codemadness.org 70
+i codemadness.org 70
+i tar -xzf "${f}" share/opensbi/generic/fw_jump.bin codemadness.org 70
+i } codemadness.org 70
+i codemadness.org 70
+i uboot() { codemadness.org 70
+i f="uboot.tgz" codemadness.org 70
+i test -f "${f}" && return # download and extract once. codemadness.org 70
+i codemadness.org 70
+i url="${mirror}/${release}/packages/amd64/u-boot-riscv64-2021.07p0.tgz" codemadness.org 70
+i curl -o "${f}" "${url}" codemadness.org 70
+i codemadness.org 70
+i tar -xzf "${f}" share/u-boot/qemu-riscv64_smode/u-boot.bin codemadness.org 70
+i } codemadness.org 70
+i codemadness.org 70
+i setup() { codemadness.org 70
+i miniroot codemadness.org 70
+i createrootdisk codemadness.org 70
+i opensbi codemadness.org 70
+i uboot codemadness.org 70
+i } codemadness.org 70
+i codemadness.org 70
+i run() { codemadness.org 70
+i qemu-system-riscv64 \ codemadness.org 70
+i -machine virt \ codemadness.org 70
+i -nographic \ codemadness.org 70
+i -m 2048M \ codemadness.org 70
+i -smp 2 \ codemadness.org 70
+i -bios share/opensbi/generic/fw_jump.bin \ codemadness.org 70
+i -kernel share/u-boot/qemu-riscv64_smode/u-boot.bin \ codemadness.org 70
+i -drive file=disk.raw,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 \ codemadness.org 70
+i -netdev user,id=net0,ipv6=off -device virtio-net-device,netdev=net0 codemadness.org 70
+i } codemadness.org 70
+i codemadness.org 70
+i setup codemadness.org 70
+i run codemadness.org 70
+.
(DIR) diff --git a/output/phlog/rss b/output/phlog/rss
@@ -0,0 +1,252 @@
+1<- Back / codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i# Using RSS/Atom feeds codemadness.org 70
+i codemadness.org 70
+iLast modification on 2022-04-18 codemadness.org 70
+i codemadness.org 70
+iTODO: codemadness.org 70
+ix link to sfeed and sfeed_curses page codemadness.org 70
+ix link to curl page codemadness.org 70
+ix link to iconv manual or POSIX page? codemadness.org 70
+i- link to RSS2 latest adhoc spec? codemadness.org 70
+i- change luke smith links to eevblog or so? codemadness.org 70
+i- OPML: change links to codemadness and some youtube channels? codemadness.org 70
+i- change dxvk github link to yt-dlp or maybe openbsd? codemadness.org 70
+i codemadness.org 70
+i- peertube/oddyssee change link from luke smith? codemadness.org 70
+i- change OPML feed links. codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i- section for website authors: codemadness.org 70
+i - add an option for the full content Atom feed if possible. codemadness.org 70
+i - please keep RSS/Atom alive. codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## What is RSS/Atom and what problems does it solve? codemadness.org 70
+i codemadness.org 70
+iBoth are data formats in XML to store a list of feed entries, such as text or codemadness.org 70
+imedia items in a structured manner. codemadness.org 70
+i codemadness.org 70
+h* RSS is an evolving standard (and it is a bit vaguely defined sometimes). URL:https://www.rssboard.org/rss-specification codemadness.org 70
+h* Atom is a RFC standardized format: "RFC4287 - The Atom Syndication Format" URL:https://tools.ietf.org/html/rfc4287 codemadness.org 70
+i codemadness.org 70
+iRSS/Atom is commonly used for: codemadness.org 70
+i* Keeping track of news from newssites (headlines and content). codemadness.org 70
+i* Keeping track of software releases. codemadness.org 70
+i* Listings of podcasts with maybe some .mp3 file attachment aka an enclosure. codemadness.org 70
+i* Bittorrent listings with a .torrent or magnet link. codemadness.org 70
+i codemadness.org 70
+iIn general this makes organizing and keeping track of content more structured codemadness.org 70
+iand convenient. As a user you can more quickly filter interesting news and codemadness.org 70
+idon't have to use all the different site navigations. codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## RSS/Atom formats and extensions codemadness.org 70
+i codemadness.org 70
+i* Atom 1.0 (RFC 4287): https://datatracker.ietf.org/doc/html/rfc4287 codemadness.org 70
+i* Atom 0.3 (draft, historic): rarely used anymore. codemadness.org 70
+i* RSS 0.91+. codemadness.org 70
+i* RDF (when used with RSS). codemadness.org 70
+i* MediaRSS extensions (media:). codemadness.org 70
+i* Dublin Core extensions (dc:). codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## Atom XML example codemadness.org 70
+i codemadness.org 70
+iThis is an example of the XML data format of an Atom feed. Typically there is codemadness.org 70
+iatleast a title, link and a timestamp, for example for the xkcd.com Atom feed codemadness.org 70
+iat https://xkcd.com/atom.xml: codemadness.org 70
+i codemadness.org 70
+i <?xml version="1.0" encoding="utf-8"?> codemadness.org 70
+i <feed xml:lang="en"> codemadness.org 70
+i <title>xkcd.com</title> <!-- feed title --> codemadness.org 70
+i <link href="https://xkcd.com/" rel="alternate"/> codemadness.org 70
+i <id>https://xkcd.com/</id> codemadness.org 70
+i <updated>2020-09-04T00:00:00Z</updated> codemadness.org 70
+i codemadness.org 70
+i <!-- items --> codemadness.org 70
+i <entry> codemadness.org 70
+i <title>University COVID Model</title> codemadness.org 70
+i <link href="https://xkcd.com/2355/" /> codemadness.org 70
+i <updated>2020-09-04T00:00:00Z</updated> codemadness.org 70
+i <id>https://xkcd.com/2355/</id> codemadness.org 70
+i <summary type="html"> codemadness.org 70
+i <img src="https://imgs.xkcd.com/comics/somename.png "/> codemadness.org 70
+i </summary> codemadness.org 70
+i </entry> codemadness.org 70
+i <!-- ... more items. --> codemadness.org 70
+i </feed> codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## General way to get a RSS/Atom feed codemadness.org 70
+i codemadness.org 70
+iA common way for websites to indicate they have RSS/Atom feeds is to have a codemadness.org 70
+ilink reference in the HTML code. codemadness.org 70
+i codemadness.org 70
+iFor Atom: codemadness.org 70
+i codemadness.org 70
+i <link rel="alternate" href="atom.xml" type="application/atom+xml" title="Codemadness Atom Feed" /> codemadness.org 70
+i codemadness.org 70
+ior for RSS: codemadness.org 70
+i codemadness.org 70
+i <link rel="alternate" href="rss.xml" type="application/rss+xml" title="Codemadness RSS Feed" /> codemadness.org 70
+i codemadness.org 70
+hThe »sfeed_web« tool can also help with these sort of feeds and /sfeed.html codemadness.org 70
+iextract the URLs from a HTML page: codemadness.org 70
+i codemadness.org 70
+i url="https://codemadness.org"; curl -s "$url" | sfeed_web "$url" codemadness.org 70
+i codemadness.org 70
+iThe Firefox webbrowser used to show an icon to indicate it has a RSS/Atom. codemadness.org 70
+iUnfortunately browsers nowadays don't show this anymore by default. codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## Websites codemadness.org 70
+i codemadness.org 70
+i### Github codemadness.org 70
+i codemadness.org 70
+iGithub offers an Atom feed of releases and of commits. codemadness.org 70
+i codemadness.org 70
+h* Releases URL:https://github.com/yt-dlp/yt-dlp/releases.atom codemadness.org 70
+h* Tags URL:https://github.com/yt-dlp/yt-dlp/tags.atom codemadness.org 70
+h* »Commits«: by adding URL:https://github.com/yt-dlp/yt-dlp/commits/master.atom codemadness.org 70
+i ".atom" to the URI you can get the Atom feed. codemadness.org 70
+i codemadness.org 70
+iUnfortunately it doesn't offer a way to get a feed of issues directly. It can codemadness.org 70
+ihowever be done using the public API and a conversion script: codemadness.org 70
+i codemadness.org 70
+1https://git.codemadness.org/randomcrap/file/config/sfeed/connectors/github.html /git/randomcrap/file/config/sfeed/connectors/github.gph codemadness.org 70
+i codemadness.org 70
+iGithub API documentation reference: codemadness.org 70
+i codemadness.org 70
+hhttps://docs.github.com/en/rest/reference/issues URL:https://docs.github.com/en/rest/reference/issues codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i### Peertube codemadness.org 70
+i codemadness.org 70
+hhttps://videos.lukesmith.xyz/feeds/videos.xml?videoChannelId=2 URL:https://videos.lukesmith.xyz/feeds/videos.xml?videoChannelId=2 codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i### Odysee / LBRY codemadness.org 70
+i codemadness.org 70
+hhttps://odysee.com/$/rss/@Luke/70 URL:https://odysee.com/$/rss/@Luke/70 codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i### Reddit codemadness.org 70
+i codemadness.org 70
+iBy adding ".rss" to the URI you can get the RSS feed: codemadness.org 70
+i codemadness.org 70
+hhttps://old.reddit.com/r/openbsd/.rss URL:https://old.reddit.com/r/openbsd/.rss codemadness.org 70
+i codemadness.org 70
+iSome parameters can be changed. This is described in the Reddit API codemadness.org 70
+hdocumentation: »https://www.reddit.com/dev/api/« URL:https://www.reddit.com/dev/api/ codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i### Vimeo codemadness.org 70
+i codemadness.org 70
+iHere is a Vimeo connector script that converts data from the public JSON API to codemadness.org 70
+ian Atom feed: codemadness.org 70
+i codemadness.org 70
+1https://git.codemadness.org/randomcrap/file/config/sfeed/connectors/vimeo.html /git/randomcrap/file/config/sfeed/connectors/vimeo.gph codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i### Wordpress codemadness.org 70
+i codemadness.org 70
+iMany news websites use Wordpress. Some don't offer a RSS/Atom feed in the HTML codemadness.org 70
+iheader code. Some still allow to fetch them using the common URI: "/feed/". codemadness.org 70
+i codemadness.org 70
+hLike: »https://www.pine64.org/feed/« URL:https://www.pine64.org/feed/ codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i### Youtube codemadness.org 70
+i codemadness.org 70
+iTo get the latest videos by channel ID: codemadness.org 70
+i codemadness.org 70
+hhttps://www.youtube.com/feeds/videos.xml?channel_id=UC45N5D3dvAFvLEby-XOn4og URL:https://www.youtube.com/feeds/videos.xml?channel_id=UC45N5D3dvAFvLEby-XOn4og codemadness.org 70
+i codemadness.org 70
+iOr the latest videos by username: codemadness.org 70
+i codemadness.org 70
+hhttps://www.youtube.com/feeds/videos.xml?user=AwesomeSauceNews URL:https://www.youtube.com/feeds/videos.xml?user=AwesomeSauceNews codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+iMy minimalistic Youtube front-end idiotbox shows the Atom feed of channels, for codemadness.org 70
+iexample using the search "gunther": codemadness.org 70
+i codemadness.org 70
+hhttps://idiotbox.codemadness.org/?q=gunther URL:https://idiotbox.codemadness.org/?q=gunther codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## Wikipedia codemadness.org 70
+i codemadness.org 70
+iIt's possible to view the edit history of a page, for example: codemadness.org 70
+i codemadness.org 70
+hhttps://en.wikipedia.org/w/index.php?title=Frikandel&feed=atom&action=history URL:https://en.wikipedia.org/w/index.php?title=Frikandel&feed=atom&action=history codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## Services and proxies codemadness.org 70
+i codemadness.org 70
+i### RSSBridge codemadness.org 70
+i codemadness.org 70
+iI have not used this program myself and it seems a bit bloated but it offers a codemadness.org 70
+iway of converting some websites to RSS. However for some sites an API key is codemadness.org 70
+irequired. codemadness.org 70
+i codemadness.org 70
+hhttps://github.com/RSS-Bridge/rss-bridge URL:https://github.com/RSS-Bridge/rss-bridge codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i### Twitter / Nitter codemadness.org 70
+i codemadness.org 70
+iHere is a proxy website for Twitter called Nitter that offers RSS feeds: codemadness.org 70
+i codemadness.org 70
+hhttps://nitter.net/ID_AA_Carmack/rss URL:https://nitter.net/ID_AA_Carmack/rss codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## OPML codemadness.org 70
+i codemadness.org 70
+iOPML is a XML-based format typically used for importing or exporting a list of feeds. codemadness.org 70
+iSome programs that support it are newsboat, sfeed, rss2email, Mozilla Thunderbird. codemadness.org 70
+i codemadness.org 70
+iThe format typically looks like this: codemadness.org 70
+i codemadness.org 70
+i <?xml version="1.0" encoding="UTF-8"?> codemadness.org 70
+i <opml version="1.0"> codemadness.org 70
+i <body> codemadness.org 70
+i <outline type="rss" title="suckless sites" text="suckless sites" xmlUrl="https://git.suckless.org/sites/atom.xml"/> codemadness.org 70
+i <outline type="rss" title="scc compiler" text="scc compiler" xmlUrl="https://git.simple-cc.org/scc/atom.xml"/> codemadness.org 70
+i </body> codemadness.org 70
+i </opml> codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+iFor sfeed to export to OPML: codemadness.org 70
+i codemadness.org 70
+i sfeed_opml_export > file.opml codemadness.org 70
+i codemadness.org 70
+iFor sfeed to import and convert OPML to an sfeed rc file: codemadness.org 70
+i codemadness.org 70
+i sfeed_opml_import < file.opml > ~/.sfeed/sfeedrc codemadness.org 70
+i codemadness.org 70
+iTo export in newsboat: codemadness.org 70
+i codemadness.org 70
+i newsboat -e > file.opml codemadness.org 70
+i codemadness.org 70
+iFor RSS2email: codemadness.org 70
+i codemadness.org 70
+i r2e opmlexport > file.opml codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## Tools codemadness.org 70
+i codemadness.org 70
+h* sfeed: RSS/Atom parser and tool to convert from XML to a simple TAB-separated format. URL:https://codemadness.org/sfeed.html codemadness.org 70
+i It contains various RSS/Atom-related helper programs and formatting programs aswell. codemadness.org 70
+h* curl: swiss-army-knife tool to get data from many protocols, like HTTP, HTTPS, gopher. URL:https://curl.se/ codemadness.org 70
+h* alternatively: hurl: a HTTP, HTTPS and gopher file grabber URL:https://codemadness.org/hurl.html codemadness.org 70
+h* iconv: useful to convert text-encoding to UTF-8. URL:https://pubs.opengroup.org/onlinepubs/9699919799/utilities/iconv.html codemadness.org 70
+h* youtube-dl to download videos by URL from Youtube (or many other sites). URL:https://youtube-dl.org/ codemadness.org 70
+h* alternatively: yt-dlp which is a fork of youtube-dl and more actively maintained at the moment. URL:https://github.com/yt-dlp/yt-dlp codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## The end codemadness.org 70
+i codemadness.org 70
+iI hope this is useful. codemadness.org 70
+.
(DIR) diff --git a/output/phlog/todo b/output/phlog/todo
@@ -0,0 +1 @@
+todo-application
+\ No newline at end of file
(DIR) diff --git a/output/phlog/todo-application b/output/phlog/todo-application
@@ -0,0 +1,104 @@
+1<- Back / codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i# A simple TODO application codemadness.org 70
+i codemadness.org 70
+iLast modification on 2022-07-01 codemadness.org 70
+i codemadness.org 70
+iThis article describes a TODO application or workflow. codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## Workflow codemadness.org 70
+i codemadness.org 70
+iIt works like this: codemadness.org 70
+i codemadness.org 70
+i* Open any text editor. codemadness.org 70
+i* Edit the text. codemadness.org 70
+i* Save it in a file (probably named "TODO"). codemadness.org 70
+i* Feel happy about it. codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## The text format codemadness.org 70
+i codemadness.org 70
+iThe text format I use is this: codemadness.org 70
+i codemadness.org 70
+i [indendations]<symbol><SPACE><item text><NEWLINE> codemadness.org 70
+i codemadness.org 70
+iMost of the time an item is just one line. codemadness.org 70
+iThis format is just a general guideline to keep the items somewhat structured. codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## Symbols codemadness.org 70
+i codemadness.org 70
+iItems are prefixed with a symbol. codemadness.org 70
+i codemadness.org 70
+i* - is an item which is planned to be done at some point. codemadness.org 70
+i* x is an item which is done. codemadness.org 70
+i* ? is an item which I'm not (yet) sure about. It can also be an idea. codemadness.org 70
+i codemadness.org 70
+iI use an indendation with a TAB before an item to indicate item dependencies. codemadness.org 70
+iThe items can be nested. codemadness.org 70
+i codemadness.org 70
+iFor the prioritization I put the most important items and sections from the top codemadness.org 70
+ito the bottom. These can be reshuffled as you wish of course. codemadness.org 70
+i codemadness.org 70
+iTo delete an item you remove the line. To archive an item you keep the line. codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## Sections codemadness.org 70
+i codemadness.org 70
+iA section is a line which has no symbol. This is like a header to group items. codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## Example codemadness.org 70
+i codemadness.org 70
+i Checklist for releasing project 0.1: codemadness.org 70
+i - Test project with different compilers and check for warnings. codemadness.org 70
+i - Documentation: codemadness.org 70
+i - Proofread and make sure it matches all program behaviour. codemadness.org 70
+i - Run mandoc -Tlint on the man pages. codemadness.org 70
+i ? Copy useful examples from the README file to the man page? codemadness.org 70
+i - Run testsuite and check for failures before release. codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i project 0.2: codemadness.org 70
+i ? Investigate if feature mentioned by some user is worth adding. codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i# Example: secure remote cloud-encrypted edit session(tm) codemadness.org 70
+i codemadness.org 70
+i ssh -t host 'ed TODO' codemadness.org 70
+i codemadness.org 70
+i# Example: multi-user secure remote cloud-encrypted edit session(tm) codemadness.org 70
+i codemadness.org 70
+i ssh host codemadness.org 70
+i tmux or tmux a codemadness.org 70
+i ed TODO codemadness.org 70
+i codemadness.org 70
+i# Example: version-controlled multi-user secure remote cloud-encrypted edit session(tm) codemadness.org 70
+i codemadness.org 70
+i ssh host codemadness.org 70
+i tmux or tmux a codemadness.org 70
+i ed TODO codemadness.org 70
+i git add TODO codemadness.org 70
+i git commit -m 'TODO: update' codemadness.org 70
+i codemadness.org 70
+i## Pros codemadness.org 70
+i codemadness.org 70
+i* When you open the TODO file the most important items are at the top. codemadness.org 70
+i* The items are easy to read and modify with any text editor. codemadness.org 70
+i* It is easy to extend the format and use with other text tools. codemadness.org 70
+i* The format is portable: it works on sticky-notes on your CRT monitor too! codemadness.org 70
+i* No monthly online subscription needed and full NO-money-back guarantee. codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## Cons codemadness.org 70
+i codemadness.org 70
+i* Complex lists with interconnected dependencies might not work, maybe. codemadness.org 70
+i* It's assumed there is one person maintaining the TODO file. Merging items codemadness.org 70
+i from multiple people at the same time in this workflow is not recommended. codemadness.org 70
+i* It is too simple: noone will be impressed by it. codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+iI hope this is inspirational or something, codemadness.org 70
+.
(DIR) diff --git a/output/phlog/totp b/output/phlog/totp
@@ -0,0 +1,65 @@
+1<- Back / codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i# 2FA TOTP without crappy authenticator apps codemadness.org 70
+i codemadness.org 70
+iLast modification on 2022-03-24 codemadness.org 70
+i codemadness.org 70
+iThis describes how to use 2FA without using crappy authenticator "apps" or a codemadness.org 70
+imobile device. codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## Install codemadness.org 70
+i codemadness.org 70
+iOn OpenBSD: codemadness.org 70
+i codemadness.org 70
+i pkg_add oath-toolkit zbar codemadness.org 70
+i codemadness.org 70
+i* oath-toolkit is used to generate the digits based on the secret key. codemadness.org 70
+i* zbar is used to scan the QR barcode text from the image. codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## Steps codemadness.org 70
+i codemadness.org 70
+iSave the QR code image from the authenticator app, website to an image file. codemadness.org 70
+iScan the QR code text from the image: codemadness.org 70
+i codemadness.org 70
+i zbarimg image.png codemadness.org 70
+i codemadness.org 70
+iAn example QR code: codemadness.org 70
+i codemadness.org 70
+IQR code example /downloads/2fa/qr.png codemadness.org 70
+i codemadness.org 70
+iThe output is typically something like: codemadness.org 70
+i codemadness.org 70
+i QR-Code:otpauth://totp/Example:someuser@codemadness.org?secret=SECRETKEY&issuer=Codemadness codemadness.org 70
+i codemadness.org 70
+iYou only need to scan this QR-code for the secret key once. codemadness.org 70
+iMake sure to store the secret key in a private safe place and don't show it to codemadness.org 70
+ianyone else. codemadness.org 70
+i codemadness.org 70
+iUsing the secret key the following command outputs a 6-digit code by default. codemadness.org 70
+iIn this example we also assume the key is base32-encoded. codemadness.org 70
+iThere can be other parameters and options, this is documented in the Yubico URI codemadness.org 70
+istring format reference below. codemadness.org 70
+i codemadness.org 70
+iCommand: codemadness.org 70
+i codemadness.org 70
+i oathtool --totp -b SOMEKEY codemadness.org 70
+i codemadness.org 70
+i* The --totp option uses the time-variant TOTP mode, by default it uses HMAC SHA1. codemadness.org 70
+i* The -b option uses base32 encoding of KEY instead of hex. codemadness.org 70
+i codemadness.org 70
+iTip: you can create a script that automatically puts the digits in the codemadness.org 70
+iclipboard, for example: codemadness.org 70
+i codemadness.org 70
+i oathtool --totp -b SOMEKEY | xclip codemadness.org 70
+i codemadness.org 70
+i codemadness.org 70
+i## References codemadness.org 70
+i codemadness.org 70
+h* zbarimg(1) man page URL:https://linux.die.net/man/1/zbarimg codemadness.org 70
+h* oathtool(1) man page URL:https://www.nongnu.org/oath-toolkit/man-oathtool.html codemadness.org 70
+h* RFC6238 - TOTP: Time-Based One-Time Password Algorithm URL:https://datatracker.ietf.org/doc/html/rfc6238 codemadness.org 70
+h* Yubico.com - otpauth URI string format URL:https://docs.yubico.com/yesdk/users-manual/application-oath/uri-string-format.html codemadness.org 70
+.
(DIR) diff --git a/output/todo-application.html b/output/todo-application.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html>
+<html dir="ltr" lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width" />
+ <meta name="keywords" content="todo, simple solutions(tm)" />
+ <meta name="description" content="A simple TODO application workflow" />
+ <meta name="author" content="Hiltjo" />
+ <meta name="generator" content="Static content generated using saait: https://codemadness.org/saait.html" />
+ <title>A simple TODO application - Codemadness</title>
+ <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
+ <link rel="stylesheet" href="print.css" type="text/css" media="print" />
+ <link rel="alternate" href="atom.xml" type="application/atom+xml" title="Codemadness Atom Feed" />
+ <link rel="alternate" href="atom_content.xml" type="application/atom+xml" title="Codemadness Atom Feed with content" />
+ <link rel="icon" href="/favicon.png" type="image/png" />
+</head>
+<body>
+ <nav id="menuwrap">
+ <table id="menu" width="100%" border="0">
+ <tr>
+ <td id="links" align="left">
+ <a href="index.html">Blog</a> |
+ <a href="/git/" title="Git repository with some of my projects">Git</a> |
+ <a href="/releases/">Releases</a> |
+ <a href="gopher://codemadness.org">Gopherhole</a>
+ </td>
+ <td id="links-contact" align="right">
+ <span class="hidden"> | </span>
+ <a href="feeds.html">Feeds</a> |
+ <a href="pgp.asc">PGP</a> |
+ <a href="mailto:hiltjo@AT@codemadness.DOT.org">Mail</a>
+ </td>
+ </tr>
+ </table>
+ </nav>
+ <hr class="hidden" />
+ <main id="mainwrap">
+ <div id="main">
+ <article>
+<header>
+ <h1>A simple TODO application</h1>
+ <p>
+ <strong>Last modification on </strong> <time>2022-07-01</time>
+ </p>
+</header>
+
+<p>This article describes a TODO application or workflow.</p>
+<h2>Workflow</h2>
+<p>It works like this:</p>
+<ul>
+<li>Open any text editor.</li>
+<li>Edit the text.</li>
+<li>Save it in a file (probably named "TODO").</li>
+<li>Feel happy about it.</li>
+</ul>
+<h2>The text format</h2>
+<p>The text format I use is this:</p>
+<pre><code>[indendations]<symbol><SPACE><item text><NEWLINE>
+</code></pre>
+<p>Most of the time an item is just one line.
+This format is just a general guideline to keep the items somewhat structured.</p>
+<h2>Symbols</h2>
+<p>Items are prefixed with a symbol.</p>
+<ul>
+<li>- is an item which is planned to be done at some point.</li>
+<li>x is an item which is done.</li>
+<li>? is an item which I'm not (yet) sure about. It can also be an idea.</li>
+</ul>
+<p>I use an indendation with a TAB before an item to indicate item dependencies.
+The items can be nested.</p>
+<p>For the prioritization I put the most important items and sections from the top
+to the bottom. These can be reshuffled as you wish of course.</p>
+<p>To delete an item you remove the line. To archive an item you keep the line.</p>
+<h2>Sections</h2>
+<p>A section is a line which has no symbol. This is like a header to group items.</p>
+<h2>Example</h2>
+<pre><code>Checklist for releasing project 0.1:
+- Test project with different compilers and check for warnings.
+- Documentation:
+ - Proofread and make sure it matches all program behaviour.
+ - Run mandoc -Tlint on the man pages.
+ ? Copy useful examples from the README file to the man page?
+- Run testsuite and check for failures before release.
+
+
+project 0.2:
+? Investigate if feature mentioned by some user is worth adding.
+</code></pre>
+<h1>Example: secure remote cloud-encrypted edit session(tm)</h1>
+<pre><code>ssh -t host 'ed TODO'
+</code></pre>
+<h1>Example: multi-user secure remote cloud-encrypted edit session(tm)</h1>
+<pre><code>ssh host
+tmux or tmux a
+ed TODO
+</code></pre>
+<h1>Example: version-controlled multi-user secure remote cloud-encrypted edit session(tm)</h1>
+<pre><code>ssh host
+tmux or tmux a
+ed TODO
+git add TODO
+git commit -m 'TODO: update'
+</code></pre>
+<h2>Pros</h2>
+<ul>
+<li>When you open the TODO file the most important items are at the top.</li>
+<li>The items are easy to read and modify with any text editor.</li>
+<li>It is easy to extend the format and use with other text tools.</li>
+<li>The format is portable: it works on sticky-notes on your CRT monitor too!</li>
+<li>No monthly online subscription needed and full NO-money-back guarantee.</li>
+</ul>
+<h2>Cons</h2>
+<ul>
+<li>Complex lists with interconnected dependencies might not work, maybe.</li>
+<li>It's assumed there is one person maintaining the TODO file. Merging items
+from multiple people at the same time in this workflow is not recommended.</li>
+<li>It is too simple: noone will be impressed by it.</li>
+</ul>
+<p>I hope this is inspirational or something,</p>
+
+ </article>
+ </div>
+ </main>
+</body>
+</html>
(DIR) diff --git a/output/todo-application.md b/output/todo-application.md
@@ -0,0 +1,96 @@
+This article describes a TODO application or workflow.
+
+
+## Workflow
+
+It works like this:
+
+* Open any text editor.
+* Edit the text.
+* Save it in a file (probably named "TODO").
+* Feel happy about it.
+
+
+## The text format
+
+The text format I use is this:
+
+ [indendations]<symbol><SPACE><item text><NEWLINE>
+
+Most of the time an item is just one line.
+This format is just a general guideline to keep the items somewhat structured.
+
+
+## Symbols
+
+Items are prefixed with a symbol.
+
+* - is an item which is planned to be done at some point.
+* x is an item which is done.
+* ? is an item which I'm not (yet) sure about. It can also be an idea.
+
+I use an indendation with a TAB before an item to indicate item dependencies.
+The items can be nested.
+
+For the prioritization I put the most important items and sections from the top
+to the bottom. These can be reshuffled as you wish of course.
+
+To delete an item you remove the line. To archive an item you keep the line.
+
+
+## Sections
+
+A section is a line which has no symbol. This is like a header to group items.
+
+
+## Example
+
+ Checklist for releasing project 0.1:
+ - Test project with different compilers and check for warnings.
+ - Documentation:
+ - Proofread and make sure it matches all program behaviour.
+ - Run mandoc -Tlint on the man pages.
+ ? Copy useful examples from the README file to the man page?
+ - Run testsuite and check for failures before release.
+
+
+ project 0.2:
+ ? Investigate if feature mentioned by some user is worth adding.
+
+
+# Example: secure remote cloud-encrypted edit session(tm)
+
+ ssh -t host 'ed TODO'
+
+# Example: multi-user secure remote cloud-encrypted edit session(tm)
+
+ ssh host
+ tmux or tmux a
+ ed TODO
+
+# Example: version-controlled multi-user secure remote cloud-encrypted edit session(tm)
+
+ ssh host
+ tmux or tmux a
+ ed TODO
+ git add TODO
+ git commit -m 'TODO: update'
+
+## Pros
+
+* When you open the TODO file the most important items are at the top.
+* The items are easy to read and modify with any text editor.
+* It is easy to extend the format and use with other text tools.
+* The format is portable: it works on sticky-notes on your CRT monitor too!
+* No monthly online subscription needed and full NO-money-back guarantee.
+
+
+## Cons
+
+* Complex lists with interconnected dependencies might not work, maybe.
+* It's assumed there is one person maintaining the TODO file. Merging items
+ from multiple people at the same time in this workflow is not recommended.
+* It is too simple: noone will be impressed by it.
+
+
+I hope this is inspirational or something,
(DIR) diff --git a/output/todo.html b/output/todo.html
@@ -0,0 +1 @@
+todo-application.html
+\ No newline at end of file
(DIR) diff --git a/output/totp.html b/output/totp.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html dir="ltr" lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <meta http-equiv="Content-Language" content="en" />
+ <meta name="viewport" content="width=device-width" />
+ <meta name="keywords" content="oauthtool, zbarimg, totp, 2FA, authenticator" />
+ <meta name="description" content="Using 2FA TOTP without crappy authenticator apps" />
+ <meta name="author" content="Hiltjo" />
+ <meta name="generator" content="Static content generated using saait: https://codemadness.org/saait.html" />
+ <title>2FA TOTP without crappy authenticator apps - Codemadness</title>
+ <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
+ <link rel="stylesheet" href="print.css" type="text/css" media="print" />
+ <link rel="alternate" href="atom.xml" type="application/atom+xml" title="Codemadness Atom Feed" />
+ <link rel="alternate" href="atom_content.xml" type="application/atom+xml" title="Codemadness Atom Feed with content" />
+ <link rel="icon" href="/favicon.png" type="image/png" />
+</head>
+<body>
+ <nav id="menuwrap">
+ <table id="menu" width="100%" border="0">
+ <tr>
+ <td id="links" align="left">
+ <a href="index.html">Blog</a> |
+ <a href="/git/" title="Git repository with some of my projects">Git</a> |
+ <a href="/releases/">Releases</a> |
+ <a href="gopher://codemadness.org">Gopherhole</a>
+ </td>
+ <td id="links-contact" align="right">
+ <span class="hidden"> | </span>
+ <a href="feeds.html">Feeds</a> |
+ <a href="pgp.asc">PGP</a> |
+ <a href="mailto:hiltjo@AT@codemadness.DOT.org">Mail</a>
+ </td>
+ </tr>
+ </table>
+ </nav>
+ <hr class="hidden" />
+ <main id="mainwrap">
+ <div id="main">
+ <article>
+<header>
+ <h1>2FA TOTP without crappy authenticator apps</h1>
+ <p>
+ <strong>Last modification on </strong> <time>2022-03-24</time>
+ </p>
+</header>
+
+<p>This describes how to use 2FA without using crappy authenticator "apps" or a
+mobile device.</p>
+<h2>Install</h2>
+<p>On OpenBSD:</p>
+<pre><code>pkg_add oath-toolkit zbar
+</code></pre>
+<ul>
+<li>oath-toolkit is used to generate the digits based on the secret key.</li>
+<li>zbar is used to scan the QR barcode text from the image.</li>
+</ul>
+<h2>Steps</h2>
+<p>Save the QR code image from the authenticator app, website to an image file.
+Scan the QR code text from the image:</p>
+<pre><code>zbarimg image.png
+</code></pre>
+<p>An example QR code:</p>
+<p><img src="downloads/2fa/qr.png" alt="QR code example" /></p>
+<p>The output is typically something like:</p>
+<pre><code>QR-Code:otpauth://totp/Example:someuser@codemadness.org?secret=SECRETKEY&issuer=Codemadness
+</code></pre>
+<p>You only need to scan this QR-code for the secret key once.
+Make sure to store the secret key in a private safe place and don't show it to
+anyone else.</p>
+<p>Using the secret key the following command outputs a 6-digit code by default.
+In this example we also assume the key is base32-encoded.
+There can be other parameters and options, this is documented in the Yubico URI
+string format reference below.</p>
+<p>Command:</p>
+<pre><code>oathtool --totp -b SOMEKEY
+</code></pre>
+<ul>
+<li>The --totp option uses the time-variant TOTP mode, by default it uses HMAC SHA1.</li>
+<li>The -b option uses base32 encoding of KEY instead of hex.</li>
+</ul>
+<p>Tip: you can create a script that automatically puts the digits in the
+clipboard, for example:</p>
+<pre><code>oathtool --totp -b SOMEKEY | xclip
+</code></pre>
+<h2>References</h2>
+<ul>
+<li><a href="https://linux.die.net/man/1/zbarimg">zbarimg(1) man page</a></li>
+<li><a href="https://www.nongnu.org/oath-toolkit/man-oathtool.html">oathtool(1) man page</a></li>
+<li><a href="https://datatracker.ietf.org/doc/html/rfc6238">RFC6238 - TOTP: Time-Based One-Time Password Algorithm</a></li>
+<li><a href="https://docs.yubico.com/yesdk/users-manual/application-oath/uri-string-format.html">Yubico.com - otpauth URI string format</a></li>
+</ul>
+
+ </article>
+ </div>
+ </main>
+</body>
+</html>
(DIR) diff --git a/output/totp.md b/output/totp.md
@@ -0,0 +1,57 @@
+This describes how to use 2FA without using crappy authenticator "apps" or a
+mobile device.
+
+
+## Install
+
+On OpenBSD:
+
+ pkg_add oath-toolkit zbar
+
+* oath-toolkit is used to generate the digits based on the secret key.
+* zbar is used to scan the QR barcode text from the image.
+
+
+## Steps
+
+Save the QR code image from the authenticator app, website to an image file.
+Scan the QR code text from the image:
+
+ zbarimg image.png
+
+An example QR code:
+
+
+
+The output is typically something like:
+
+ QR-Code:otpauth://totp/Example:someuser@codemadness.org?secret=SECRETKEY&issuer=Codemadness
+
+You only need to scan this QR-code for the secret key once.
+Make sure to store the secret key in a private safe place and don't show it to
+anyone else.
+
+Using the secret key the following command outputs a 6-digit code by default.
+In this example we also assume the key is base32-encoded.
+There can be other parameters and options, this is documented in the Yubico URI
+string format reference below.
+
+Command:
+
+ oathtool --totp -b SOMEKEY
+
+* The --totp option uses the time-variant TOTP mode, by default it uses HMAC SHA1.
+* The -b option uses base32 encoding of KEY instead of hex.
+
+Tip: you can create a script that automatically puts the digits in the
+clipboard, for example:
+
+ oathtool --totp -b SOMEKEY | xclip
+
+
+## References
+
+* [zbarimg(1) man page](https://linux.die.net/man/1/zbarimg)
+* [oathtool(1) man page](https://www.nongnu.org/oath-toolkit/man-oathtool.html)
+* [RFC6238 - TOTP: Time-Based One-Time Password Algorithm](https://datatracker.ietf.org/doc/html/rfc6238)
+* [Yubico.com - otpauth URI string format](https://docs.yubico.com/yesdk/users-manual/application-oath/uri-string-format.html)
(DIR) diff --git a/pages/todo-application.cfg b/pages/todo-application.cfg
@@ -0,0 +1,6 @@
+title = A simple TODO application
+id = todo
+description = A simple TODO application workflow
+keywords = todo, simple solutions(tm)
+created = 2022-07-01
+updated = 2022-07-01
(DIR) diff --git a/pages/todo-application.md b/pages/todo-application.md
@@ -0,0 +1,96 @@
+This article describes a TODO application or workflow.
+
+
+## Workflow
+
+It works like this:
+
+* Open any text editor.
+* Edit the text.
+* Save it in a file (probably named "TODO").
+* Feel happy about it.
+
+
+## The text format
+
+The text format I use is this:
+
+ [indendations]<symbol><SPACE><item text><NEWLINE>
+
+Most of the time an item is just one line.
+This format is just a general guideline to keep the items somewhat structured.
+
+
+## Symbols
+
+Items are prefixed with a symbol.
+
+* - is an item which is planned to be done at some point.
+* x is an item which is done.
+* ? is an item which I'm not (yet) sure about. It can also be an idea.
+
+I use an indendation with a TAB before an item to indicate item dependencies.
+The items can be nested.
+
+For the prioritization I put the most important items and sections from the top
+to the bottom. These can be reshuffled as you wish of course.
+
+To delete an item you remove the line. To archive an item you keep the line.
+
+
+## Sections
+
+A section is a line which has no symbol. This is like a header to group items.
+
+
+## Example
+
+ Checklist for releasing project 0.1:
+ - Test project with different compilers and check for warnings.
+ - Documentation:
+ - Proofread and make sure it matches all program behaviour.
+ - Run mandoc -Tlint on the man pages.
+ ? Copy useful examples from the README file to the man page?
+ - Run testsuite and check for failures before release.
+
+
+ project 0.2:
+ ? Investigate if feature mentioned by some user is worth adding.
+
+
+# Example: secure remote cloud-encrypted edit session(tm)
+
+ ssh -t host 'ed TODO'
+
+# Example: multi-user secure remote cloud-encrypted edit session(tm)
+
+ ssh host
+ tmux or tmux a
+ ed TODO
+
+# Example: version-controlled multi-user secure remote cloud-encrypted edit session(tm)
+
+ ssh host
+ tmux or tmux a
+ ed TODO
+ git add TODO
+ git commit -m 'TODO: update'
+
+## Pros
+
+* When you open the TODO file the most important items are at the top.
+* The items are easy to read and modify with any text editor.
+* It is easy to extend the format and use with other text tools.
+* The format is portable: it works on sticky-notes on your CRT monitor too!
+* No monthly online subscription needed and full NO-money-back guarantee.
+
+
+## Cons
+
+* Complex lists with interconnected dependencies might not work, maybe.
+* It's assumed there is one person maintaining the TODO file. Merging items
+ from multiple people at the same time in this workflow is not recommended.
+* It is too simple: noone will be impressed by it.
+
+
+I hope this is inspirational or something,
(DIR) diff --git a/pages/totp.cfg b/pages/totp.cfg
@@ -0,0 +1,6 @@
+title = 2FA TOTP without crappy authenticator apps
+id = totp
+description = Using 2FA TOTP without crappy authenticator apps
+keywords = oauthtool, zbarimg, totp, 2FA, authenticator
+created = 2022-03-23
+updated = 2022-03-24
(DIR) diff --git a/pages/totp.md b/pages/totp.md
@@ -0,0 +1,57 @@
+This describes how to use 2FA without using crappy authenticator "apps" or a
+mobile device.
+
+
+## Install
+
+On OpenBSD:
+
+ pkg_add oath-toolkit zbar
+
+* oath-toolkit is used to generate the digits based on the secret key.
+* zbar is used to scan the QR barcode text from the image.
+
+
+## Steps
+
+Save the QR code image from the authenticator app, website to an image file.
+Scan the QR code text from the image:
+
+ zbarimg image.png
+
+An example QR code:
+
+
+
+The output is typically something like:
+
+ QR-Code:otpauth://totp/Example:someuser@codemadness.org?secret=SECRETKEY&issuer=Codemadness
+
+You only need to scan this QR-code for the secret key once.
+Make sure to store the secret key in a private safe place and don't show it to
+anyone else.
+
+Using the secret key the following command outputs a 6-digit code by default.
+In this example we also assume the key is base32-encoded.
+There can be other parameters and options, this is documented in the Yubico URI
+string format reference below.
+
+Command:
+
+ oathtool --totp -b SOMEKEY
+
+* The --totp option uses the time-variant TOTP mode, by default it uses HMAC SHA1.
+* The -b option uses base32 encoding of KEY instead of hex.
+
+Tip: you can create a script that automatically puts the digits in the
+clipboard, for example:
+
+ oathtool --totp -b SOMEKEY | xclip
+
+
+## References
+
+* [zbarimg(1) man page](https://linux.die.net/man/1/zbarimg)
+* [oathtool(1) man page](https://www.nongnu.org/oath-toolkit/man-oathtool.html)
+* [RFC6238 - TOTP: Time-Based One-Time Password Algorithm](https://datatracker.ietf.org/doc/html/rfc6238)
+* [Yubico.com - otpauth URI string format](https://docs.yubico.com/yesdk/users-manual/application-oath/uri-string-format.html)