268c72523015447b37185e3a7c6962373d78386e — Josh Klar 1 year, 7 months ago 1d8c783
www: build out beginnings of personal site incl. /now
M Caddyfile => Caddyfile +2 -0
@@ 10,6 10,8 @@ klar.sh {

	redir /now /now.html permanent

	root * /srv/www

M www/Makefile => www/Makefile +27 -0
@@ 12,3 12,30 @@ all: $(OUTPUT_DIR)
	mkdir -p $(OUTPUT_DIR)
	cp -v $(INPUT_DIR)/*.png $(OUTPUT_DIR)/

# A hackish helper script to dither images and then shrink every last bit out
# of them, using https://entropymine.com/imageworsener/ (req. libpng) and
# https://optipng.sourceforge.net/
# File names should be provided as env vars or as make args:
# make worsen-image WORSEN_INPUT=~/Downloads/input.png src/output.png
# I should eventually make @2x and @3x images as well for HiDPI screens, I
# guess. TODO.
# 1280 as a standardized width is somewhat arbitrary, it's just the width of a
# 720p image which seems fine for getting any points I'll be making on this
# site across
.PHONY: worsen-image
	imagew \
		-w $(WORSEN_WIDTH) \
		-cc 6 \
		-dither f \
		-grayscale \
	optipng -o7 $(WORSEN_OUTPUT)

M www/src/_header.html => www/src/_header.html +12 -8
@@ 3,22 3,26 @@
<html lang="en">
		<meta charset="utf-8"/>
		<link rel="stylesheet" type="text/css" href="./main.css"/>

			<h1><a href="/">klardotsh</a></h1>
				Author of bad jokes and even worse software. Competitive
				robotics commentator and referee. Happiest near saltwater and
				mountains. Sometimes otherwise known as Josh.
					<li><span><a rel="me" href="https://merveilles.town/@klardotsh">On Mastodon/Fediverse</a></span></li>
					<li><span><a href="//github.com/klardotsh">Code</a></span></li>
						<a class="whoami" href="/">
							<img src="/rvwe-smolsquare.png" decoding="async"/>
					<li><span><a href="/now.html">Now</a></span></li>
					<li><span><a href="/cloudy-day.html">Cloudy Day</a></span></li>
					<li><span>Articles <span style="filter: grayscale(100%);">🚧</span></span></li>
					<li><span><a rel="me" href="https://merveilles.town/@klardotsh" title="aka Mastodon">Ephemeral Microthoughts^</a></span></li>
					<li><span><a href="//github.com/klardotsh">Code^</a></span></li>

A www/src/cloudy-day-sept2021.png => www/src/cloudy-day-sept2021.png +0 -0
A www/src/cloudy-day.md => www/src/cloudy-day.md +53 -0
@@ 0,0 1,53 @@
# Cloudy Day: a home for when the world turns gray

![Cloudy Day, then still named "Cara Mia", on a linear mooring in Bellingham,
WA, September 2021. Mainsail not present as it had recently been shredded in a
violent storm.](/cloudy-day-sept2021.png)

_Cloudy Day_ is a 1971 Challenger 32 masthead-sloop sailboat (which,
ironically, is actually about 33ft length overall), whose sailor-nerd specs
[can be found on
SailboatData](https://sailboatdata.com/sailboat/challenger-32). It is also, as
of fall 2022, my home.

> <span class="tangential">
> Cloudy Day is actually my second sailboat, though the first was only briefly
> in my care: I learned to sail in spring/early summer 2021 on an
> unnamed-so-far-as-I-understood-things Clark San Juan 28 (I forget the exact
> model year - late '70s or early '80s). Realizing the boat wasn't quite the
> one I wanted to invest tons of time or effort into (particularly, the
> electric motor refit I wanted to do), I parted with that SJ28 and purchased
> Cloudy Day.
> </span>

I purchased Cloudy Day in Bellingham, WA in August of 2021 for about $10,000
USD[^1] in a Craigslist deal. At the time, she went by the name "Cara Mia",
evidently Italian for "My Beloved". After day-sailing her around Bellingham Bay
and surrounding waters through the rest of the 2021 season, she spent the
winter first in Blaine Harbor, and then later in Squalicum Harbor back in
Bellingham, largely unused while I tended to other matters in life.

The following summer (2022), I hauled Cloudy Day out for a rather extensive
(underestimatedly so) and unfortunately-expensive electrical refit and a
repowering which I intend to retroactively document here in the near future,
replacing the Yanmar 3GM30F diesel engine (I hate fossil fuels and fossil fuels
hate us all) with a 10kW 48V electric motor and a 280AH LiFePO4 battery bank
(48V, 16s). While doing that work (and plenty more as it came up), I realized
that for the first time in my life, I had a space that was completely mine, and
a space I could make as cozy (or as rugged) as I wanted, with nobody to answer
to but the sea. I never *intended* to be a liveaboard: indeed, when I bought
Cloudy Day, I explicitly was looking for something "good enough for weekend or
summer-holiday-week getaways, maybe with some company sometimes" and not much
more. But alas, I decided that either the upcoming fall, or the following
spring, I'd move aboard. Long logistics-heavy story short, I wound up finding
winter moorage in Friday Harbor, WA for October 2022 to April 2023, and moved
aboard full-time in late October - leaks in the ceiling (from deck fittings)
and all :)

Here, friends, is where I pause this page for a moment - I'll come back and
fill in some of the alluded-to tangents and link-outs above over the winter,
and in the coming summer, I should have plenty of adventures to chronicle
aboard Cloudy Day to fill this page out more.

[^1]: Which in $CURRENT\_DAY dollars is calculatable

M www/src/index.md => www/src/index.md +33 -11
@@ 1,16 1,35 @@
# Howdy
Hi! I'm Josh (generally known online as klardotsh[^1]), a software developer,
[liveaboard sailor](/cloudy-day.html), music enthusiast, competitive robotics
commentator and referee, and dweller and explorer of the Cascadia bioregion.
You may know of me from my work on the [KMK mechanical keyboard
firmware](https://github.com/KMKfw/kmk_firmware), [the in-design gluumy
programming language](https://github.com/klardotsh/gluumy), [a tongue-in-cheek
software license](https://github.com/klardotsh/fork-off-public-license) that
went fungal[^2] on Mastodon, or for the robotics nerds in the house, from my
commentary work with [FIRST](https://firstinspires.org) and
[VEX](https://vexrobotics.com) in the Pacific Northwest.

You've reached the great abyss known as @klardotsh's website and digital
garden. Given that it's winter, not much grows here yet, but I'm working on it.
[^1]: The username was originallly formed by sounding out this domain name in
    English, but the canonical pronounciation is "klar-dotshhhh". Exactly like
    you're shushing someone right after saying "dot".

On <a rel="me" href="https://merveilles.town/@klardotsh">my Mastodon</a>,
you'll find short utterances into the void in the meantime about boats, living
on them, tech, shouting at it, programming languages, designing them, and every
so often coffee, and how much of it is necessary to survive a PNW winter.
[^2]: "Posts on [Mastodon] don't go viral, they go fungal, because the
    Fediverse is like the mycelium of mushrooms." -

If you need to contact me, `josh` at this domain is a working email address.
Generally, I'm not accepting contract work right now (or through the end of
2022), though I have plans in the works to that end in the new year perhaps.
I'm still building out this digital garden (it's winter, not much grows here
yet, but I'm working on it). In the meantime, over on <a rel="me"
href="https://merveilles.town/@klardotsh">my Mastodon</a>, you'll find short
utterances into the void in the meantime about boats, living on them, tech,
shouting at it, programming languages, designing them, and every so often
coffee, and how much of it is necessary to survive a PNW winter.

If you need to contact me, `josh` at this domain is a working email address. My
response times are generally measured in days to weeks, please be patient, but
I will get back to you.

Broadly speaking, I'm not currently accepting contract work, through the end of
2022, though I have plans in the works to that end in the new year.

## About this site

@@ 20,4 39,7 @@ it](//github.com/klardotsh/klar.sh/tree/master/www)) is
dedication](//creativecommons.org/publicdomain/zero/1.0/). It's generated from
Markdown files with [ssg6](//www.romanzolotarev.com/ssg.html) and
[lowdown](//kristaps.bsd.lv/lowdown/), and does not collect analytics data from
you. [No really, check the
source](https://github.com/klardotsh/klar.sh/tree/master/www). It should work
in almost any HTML renderer under the sun, be it a huge fancy modern GUI
browser, w3m in a terminal, or something even more creative and minimal.

M www/src/main.css => www/src/main.css +74 -39
@@ 1,12 1,24 @@
html {
	background-color: #eee;
	color: #444;
	font-family: serif;

a, a:link {
	color: #444;

@media (prefers-color-scheme: dark) {
	html {
		color: #bbb;
		background-color: #111;
		/* if this scheme looks familiar it's because it's the same as
		 * vulpes.one's gemini proxy. several design decisions were borrowed
		 * from there, actually... */
		color: #cad1d8;
		background-color: #14171a;

	html * {
		caret-color: #888;

	a, a:link {

@@ 17,9 29,16 @@ html {

body {
	font-size: 13pt;
	max-width: 650px;
	margin: 40px auto;
	margin-top: 0;
	padding: 0 10px;
	padding-top: 0;

@media only screen and (min-width: 700px) {
	body {
		max-width: 650px;
		margin: 40px auto;

/* these two media blocks are to make Chromium suck less at rendering

@@ 39,34 58,13 @@ body {

h3 {
	line-height: 1.5;

a {
	color: #057;

header {
	border-bottom: 0.5em dotted lightgrey;

header h1 {
	font-family: sans-serif;
	float: left;
	margin-right: 1em;
	padding-bottom: 0.5em;
	border-bottom: 0.15em dotted lightgrey;

header author {
	font-size: 11pt;
	text-align: center;
	display: block;

header author::after {
	clear: both;
header ul li img {
	max-height: 5em;

nav {

@@ 90,8 88,9 @@ nav ul li {
	display: inline;
	text-transform: lowercase;
	list-style-type: none;
	margin-right: 0.5em;
	font-size: 11pt;
	margin-right: 0.75em;
	font-size: 95%;
	font-family: monospace;

nav ul li::last {

@@ 102,13 101,6 @@ nav ul li span {
	display: inline-block;

nav ul li span::before {
	content: "[ ";
nav ul li span::after {
	content: " ]";

img.float-left {
	float: left;
	max-width: 25%;

@@ 121,5 113,48 @@ p::after {

#content {
	line-height: 1.4;
	line-height: 1.5em;

h1, h2, h3, h4, h5, h6 {
	font-variant: small-caps;
	font-family: sans-serif;

a {
	text-decoration: none;
	border-bottom: 1px dotted;

header .whoami {
	border-bottom: none;

header .whoami h1 {
	border-bottom: none;
	font-variant: normal;
	margin: 0.25em 0;

#content blockquote .tangential {
	display: block;
	border: 1px dotted;
	padding: 0.5em;
	text-align: center;
	font-size: 85%;

@media only screen and (max-width: 700px) {
	#content blockquote .tangential {
		margin: 0;

	#content blockquote {
		margin: 0;

#content p img {
	max-width: 100%;
	width: 100%;

A www/src/now.md => www/src/now.md +51 -0
@@ 0,0 1,51 @@
# Now

This is a living document, called a /now page, in the spirit of [Derek Sivers's
movement](https://sive.rs/nowff). Here you'll find an unordered and unranked
listing of, broadly, what I'm up to in life, and where my focuses are.

> <span class="tangential">
> If you _really_ want to see the history of this page, it's all [in version
> control](https://github.com/klardotsh/klar.sh/blob/master/www/src/now.md).
> </span>

Most recent update: `2022-11-20`

- I've recently moved aboard my boat, [Cloudy Day](/cloudy-day.html), which I
  purchased in summer 2021, and in summer 2022 gutted the electrical and
  plumbing systems and refit, rewired, and repowered the auxiliary (from diesel
  to electric). I now live, at least for the winter, in the San Juan Islands,
  and intend to live off-grid (exact locale TBD) at anchor during the warm and
  sunnier months. Almost all of this paragraph warrants callout links to
  dedicated pages, which I intend to write up over the coming weeks :)

- Related to the above, there are still several ongoing projects that didn't
  get done over the summer that I'm slowly getting through: re-plumbing various
  freshwater things (I've been using lots of reusable water jugs and bottles
  instead of the tanks on board), repairing/re-coring the ceiling/deck,
  waterproofing a few things, and planning out solar/wind power for the
  upcoming off-grid summer. I also need to rebuild the dinette area to be more
  desk-like: so far, my tech working environment has been only describable as
  "unergonomic", and I *do not* want to re-dabble in the world of RSI and/or
  early carpal tunnel.

- I got laid off in September as part of the general wave of tech layoffs and
  bubble-bursting (?), but started a new job in November which is, so far,
  seeming to be about as close to an ideal job as traditional employment can
  offer me. I'm excited to see how it shakes out, and whether it will, as I
  suspect it might, result in a less stressful and more balanced life.

- I've been dabbling with sobriety from alcohol. I'm not sure if it's a
  temporary or permanent change yet, but this is my second go-round of this
  type of change this year (a two-month stint over the summer, and now, at time
  of writing today, about a month on this stint), so something inside me is
  telling me something. Let's be real, anyway: hangovers in the second half of
  your 20's are way worse than they are in your late-teens and early 20's,
  which has a ton to do with it for me I think.

- FIRST Robotics season has started up, which has me in Seattle and its suburbs
  quite a bit lately, which I have complicated and sometimes-conflicting
  feelings about, but hey - I love the program, and I love refereeing and
  announcing robotics stuff, so for this season at least, I'll be staying the
  course. The degree of my involvement with the program in coming years is yet
  to be determined.

A www/src/rvwe-smolsquare.png => www/src/rvwe-smolsquare.png +0 -0