<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet type="text/xsl" href="/feed.xsl"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Jake Van Alstyne on jvalol</title><link>https://jva.lol/</link><description>Recent content in Jake Van Alstyne on jvalol</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://jva.lol/index.xml" rel="self" type="application/rss+xml"/><item><title>My new post script</title><link>https://jva.lol/weblog/testing-my-new-post-script/</link><pubDate>Fri, 24 Jul 2026 22:08:48 -0600</pubDate><guid>https://jva.lol/weblog/testing-my-new-post-script/</guid><description>Making it easier to post with all the wiring for comments</description><content:encoded>&lt;p&gt;Not a lot to it, just &lt;code&gt;scripts/new-post&lt;/code&gt; and follow the prompts to setup the boilerplate. Then write the content. Then to wire up comments on Popsicle Boat, &lt;code&gt;scripts/companion-prompt&lt;/code&gt; That&amp;rsquo;s it!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New Post&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#!/usr/bin/env bash
#
# new-post — scaffold a weblog post interactively.
#
# Prompts for the front matter this blog actually uses (title, slug, bundle,
# description, summary, categories, tags), writes the post with a correct
# RFC3339 date and an empty popsicleboat: line, and leaves the body to you.
# Committing the post later triggers scripts/companion-prompt, which asks for
# the thread&amp;#39;s space and wires the discussion thread (spec 0006).
set -euo pipefail
cd &amp;#34;$(git rev-parse --show-toplevel)&amp;#34;
die() { echo &amp;#34;new-post: $1&amp;#34; &amp;gt;&amp;amp;2; exit 1; }
# Quote a YAML scalar: double quotes unless the value has one, then single.
yaml_quote() {
case $1 in
*\&amp;#34;*\&amp;#39;* | *\&amp;#39;*\&amp;#34;*) die &amp;#34;can&amp;#39;t hold both quote kinds in front matter: $1&amp;#34; ;;
*\&amp;#34;*) printf &amp;#34;&amp;#39;%s&amp;#39;&amp;#34; &amp;#34;$1&amp;#34; ;;
*) printf &amp;#39;&amp;#34;%s&amp;#34;&amp;#39; &amp;#34;$1&amp;#34; ;;
esac
}
# Comma-separated answer -&amp;gt; YAML list lines (&amp;#34;- item&amp;#34; per entry).
yaml_list() {
local IFS=&amp;#39;,&amp;#39; item
for item in $1; do
item=$(printf &amp;#39;%s&amp;#39; &amp;#34;$item&amp;#34; | sed -E &amp;#39;s/^ +| +$//g&amp;#39;)
[ -n &amp;#34;$item&amp;#34; ] &amp;amp;&amp;amp; printf -- &amp;#34;- %s\n&amp;#34; &amp;#34;$item&amp;#34;
done
}
read -r -p &amp;#34;Title: &amp;#34; title
[ -n &amp;#34;$title&amp;#34; ] || die &amp;#34;a post needs a title&amp;#34;
default_slug=$(printf &amp;#39;%s&amp;#39; &amp;#34;$title&amp;#34; |
tr &amp;#39;[:upper:]&amp;#39; &amp;#39;[:lower:]&amp;#39; |
sed -E &amp;#34;s/&amp;#39;//g; s/[^a-z0-9]+/-/g; s/^-+//; s/-+$//&amp;#34;)
read -r -p &amp;#34;Slug [$default_slug]: &amp;#34; slug
slug=${slug:-$default_slug}
[ -n &amp;#34;$slug&amp;#34; ] || die &amp;#34;a post needs a slug&amp;#34;
read -r -p &amp;#34;Page bundle, for images alongside the post? [y/N]: &amp;#34; bundle
case $bundle in
[yY]*) post=&amp;#34;content/weblog/$slug/index.md&amp;#34; ;;
*) post=&amp;#34;content/weblog/$slug.md&amp;#34; ;;
esac
[ -e &amp;#34;$post&amp;#34; ] &amp;amp;&amp;amp; die &amp;#34;$post already exists&amp;#34;
read -r -p &amp;#34;Description (meta/OG line; blank to fill in later): &amp;#34; description
read -r -p &amp;#34;Summary (list-page line; blank to fill in later): &amp;#34; summary
read -r -p &amp;#34;Categories, comma-separated [Projects]: &amp;#34; categories
categories=${categories:-Projects}
read -r -p &amp;#34;Tags, comma-separated (e.g. popsicleboat, hugo): &amp;#34; tags
ts=$(date &amp;#34;+%Y-%m-%dT%H:%M:%S%z&amp;#34;)
ts=&amp;#34;${ts:0:22}:${ts:22}&amp;#34; # RFC3339 wants a colon in the offset
mkdir -p &amp;#34;$(dirname &amp;#34;$post&amp;#34;)&amp;#34;
{
echo &amp;#34;---&amp;#34;
echo &amp;#34;title: $(yaml_quote &amp;#34;$title&amp;#34;)&amp;#34;
echo &amp;#34;description: $(yaml_quote &amp;#34;$description&amp;#34;)&amp;#34;
echo &amp;#34;date: $ts&amp;#34;
echo &amp;#34;summary: $(yaml_quote &amp;#34;$summary&amp;#34;)&amp;#34;
echo &amp;#39;popsicleboat: &amp;#34;&amp;#34; # wired at commit by scripts/companion-prompt&amp;#39;
echo &amp;#34;categories:&amp;#34;
yaml_list &amp;#34;$categories&amp;#34;
if [ -n &amp;#34;$tags&amp;#34; ]; then
echo &amp;#34;tags:&amp;#34;
yaml_list &amp;#34;$tags&amp;#34;
fi
echo &amp;#34;---&amp;#34;
echo &amp;#34;&amp;#34;
} &amp;gt; &amp;#34;$post&amp;#34;
echo &amp;#34;&amp;#34;
echo &amp;#34;Created $post — write the essay.&amp;#34;
echo &amp;#34;Committing it will prompt for its companion thread (empty space answer skips).&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Companion Prompt&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#!/usr/bin/env bash
#
# companion-prompt — wire a new post&amp;#39;s companion thread at commit time.
#
# For each NEW post staged in this commit (content/weblog/*.md or a new
# bundle&amp;#39;s index.md) whose `popsicleboat:` field is empty, prompt for the
# thread&amp;#39;s space and an optional per-post thread title, write the answers
# into the front matter, run scripts/companion-thread, and re-stage the
# post — so the commit lands with its Discuss thread created and wired.
#
# Never blocks a commit. Degraded paths (no terminal, no POPSICLEBOAT_TOKEN,
# empty space answer, API failure) print how to wire the thread later and let
# the commit through. Skip the hook with COMPANION_PROMPT=0, or --no-verify.
set -uo pipefail
cd &amp;#34;$(git rev-parse --show-toplevel)&amp;#34;
[ &amp;#34;${COMPANION_PROMPT:-1}&amp;#34; = &amp;#34;0&amp;#34; ] &amp;amp;&amp;amp; exit 0
new_posts=$(git diff --cached --name-only --diff-filter=A -- \
&amp;#39;content/weblog/*.md&amp;#39; &amp;#39;content/weblog/*/index.md&amp;#39; | grep -v &amp;#39;_index\.md$&amp;#39; || true)
[ -z &amp;#34;$new_posts&amp;#34; ] &amp;amp;&amp;amp; exit 0
# Posts that already carry a thread URL (or no field at all) need no prompt.
needs_thread() {
grep -qE &amp;#39;^popsicleboat: *(&amp;#34;&amp;#34;)? *(#.*)?$&amp;#39; &amp;#34;$1&amp;#34;
}
pending=()
while IFS= read -r post; do
[ -f &amp;#34;$post&amp;#34; ] &amp;amp;&amp;amp; needs_thread &amp;#34;$post&amp;#34; &amp;amp;&amp;amp; pending+=(&amp;#34;$post&amp;#34;)
done &amp;lt;&amp;lt;&amp;lt; &amp;#34;$new_posts&amp;#34;
[ &amp;#34;${#pending[@]}&amp;#34; -eq 0 ] &amp;amp;&amp;amp; exit 0
later() { # how to finish the job after a degraded path
echo &amp;#34;companion-prompt: wire it later with: scripts/companion-thread $1 --space &amp;lt;space&amp;gt;&amp;#34; &amp;gt;&amp;amp;2
}
# -r /dev/tty lies without a controlling terminal (macOS: open fails with
# &amp;#34;Device not configured&amp;#34;), so probe by actually opening it.
if ! { : &amp;lt; /dev/tty; } 2&amp;gt;/dev/null; then
echo &amp;#34;companion-prompt: no terminal — committing without companion threads.&amp;#34; &amp;gt;&amp;amp;2
for post in &amp;#34;${pending[@]}&amp;#34;; do later &amp;#34;$post&amp;#34;; done
exit 0
fi
if [ -z &amp;#34;${POPSICLEBOAT_TOKEN:-}&amp;#34; ]; then
echo &amp;#34;companion-prompt: POPSICLEBOAT_TOKEN not set — committing without companion threads.&amp;#34; &amp;gt;&amp;amp;2
for post in &amp;#34;${pending[@]}&amp;#34;; do later &amp;#34;$post&amp;#34;; done
exit 0
fi
# Insert a front-matter line right after the popsicleboat: field.
insert_after_popsicleboat() {
local file=$1 line=$2
awk -v add=&amp;#34;$line&amp;#34; &amp;#39;{ print } !done &amp;amp;&amp;amp; /^popsicleboat:/ { print add; done = 1 }&amp;#39; \
&amp;#34;$file&amp;#34; &amp;gt; &amp;#34;$file.tmp&amp;#34; &amp;amp;&amp;amp; mv &amp;#34;$file.tmp&amp;#34; &amp;#34;$file&amp;#34;
}
for post in &amp;#34;${pending[@]}&amp;#34;; do
echo &amp;#34;&amp;#34;
echo &amp;#34;New post: $post&amp;#34;
read -r -p &amp;#34; PopsicleBoat space for its thread (empty to skip): &amp;#34; space &amp;lt; /dev/tty
if [ -z &amp;#34;$space&amp;#34; ]; then
later &amp;#34;$post&amp;#34;
continue
fi
read -r -p &amp;#34; Thread title override (empty for the template default): &amp;#34; title &amp;lt; /dev/tty
insert_after_popsicleboat &amp;#34;$post&amp;#34; &amp;#34;popsicleboat_space: \&amp;#34;$space\&amp;#34;&amp;#34;
if [ -n &amp;#34;$title&amp;#34; ]; then
case $title in
*\&amp;#34;*\&amp;#39;* | *\&amp;#39;*\&amp;#34;*)
echo &amp;#34; title has both quote kinds — front matter can&amp;#39;t hold that; using the template default.&amp;#34; &amp;gt;&amp;amp;2
;;
*\&amp;#34;*)
insert_after_popsicleboat &amp;#34;$post&amp;#34; &amp;#34;popsicleboat_title: &amp;#39;$title&amp;#39;&amp;#34;
;;
*)
insert_after_popsicleboat &amp;#34;$post&amp;#34; &amp;#34;popsicleboat_title: \&amp;#34;$title\&amp;#34;&amp;#34;
;;
esac
fi
if scripts/companion-thread &amp;#34;$post&amp;#34;; then
git add &amp;#34;$post&amp;#34;
else
echo &amp;#34;companion-prompt: thread creation failed — committing the post unwired.&amp;#34; &amp;gt;&amp;amp;2
later &amp;#34;$post&amp;#34;
git add &amp;#34;$post&amp;#34; # keep the space/title answers we wrote either way
fi
done
&lt;/code&gt;&lt;/pre&gt;</content:encoded></item><item><title>Want to talk about "want to talk about"?</title><link>https://jva.lol/weblog/want-to-talk-about-want-to-talk-about/</link><pubDate>Fri, 24 Jul 2026 21:11:22 -0600</pubDate><guid>https://jva.lol/weblog/want-to-talk-about-want-to-talk-about/</guid><description>In which a quoting bug names a thread after its own prefix, and thread titles become a per-post choice</description><content:encoded>&lt;p&gt;Discussions default with some text: &amp;ldquo;Want to talk about {your blog post title}?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;It was automatic, to my eye not off putting, but quote characters could result in some awkwardness.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m testing with this post. Its own title has quotes nested in quotes — if you&amp;rsquo;re
reading a correctly-titled thread from here, yay! I fixed it.&lt;/p&gt;
&lt;p&gt;The idea this bug prompted is a feature in which a post can now name its own conversation. A
&lt;code&gt;popsicleboat_title:&lt;/code&gt; line in the front matter overrides the template for that
one post. The template stays the default, so most posts never think about it.
This post uses it. That&amp;rsquo;s the title you see on this posts thread.&lt;/p&gt;
&lt;p&gt;Of course I&amp;rsquo;ve been doing a lot of this and testing in My Hugo blog, so I&amp;rsquo;m not sure how it would look for other blog hosting situations. Still, one step in front of the other. One day at a time.&lt;/p&gt;</content:encoded></item><item><title>Posting here, start to finish</title><link>https://jva.lol/weblog/posting-here-start-to-finish/</link><pubDate>Fri, 24 Jul 2026 20:24:29 -0600</pubDate><guid>https://jva.lol/weblog/posting-here-start-to-finish/</guid><description>Write, one command, push — and the comments take care of themselves</description><content:encoded>&lt;p&gt;Here&amp;rsquo;s the whole process of publishing a post on this blog now, comment section included.&lt;/p&gt;
&lt;p&gt;I write the post, a markdown file with some front matter, same as any Hugo blog.&lt;/p&gt;
&lt;p&gt;I run one command &lt;code&gt;scripts/companion-thread content/weblog/posting-here-start-to-finish.md --space blogging&lt;/code&gt; with POPSICLEBOAT_TOKEN exported in my shell, it creates a discussion thread for the post over on Popsicle Boat and writes the thread&amp;rsquo;s URL back into the file. That&amp;rsquo;s the entire integration.&lt;/p&gt;
&lt;p&gt;I push, Netlify builds the site, and the post goes up with a &amp;ldquo;Discuss this post&amp;rdquo; link at the bottom.&lt;/p&gt;
&lt;p&gt;The part I like is what readers get. The replies don&amp;rsquo;t live in an iframe and don&amp;rsquo;t load from a script. When the site builds, it fetches the public replies from the thread and bakes them into the page as plain HTML with no JavaScript, no tracker, no third-party anything running on your machine. The conversation is just part of the page.&lt;/p&gt;
&lt;p&gt;The page also keeps itself current. When someone replies, Popsicle Boat waits a couple of minutes. So a burst of replies becomes one build instead of five. It then pings my build hook. Netlify rebuilds, and the reply is sitting on the page about three minutes after it was written.&lt;/p&gt;
&lt;p&gt;If a comment thread ever goes away, your page quietly drops the comments callout.&lt;/p&gt;
&lt;h2 id="what-it-took-to-set-up-once"&gt;
What it took to set up, once
&lt;a class="anchor" href="#what-it-took-to-set-up-once"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;None of the above is the setup. The setup happened once, and it was three things.&lt;/p&gt;
&lt;p&gt;1 - A token. The command talks to Popsicle Boat with a personal access token. I run the service, so I mint mine on the server: &lt;code&gt;fly ssh console -a popsicleboat -C &amp;quot;sh -c 'cd /app &amp;amp;&amp;amp; MIX_ENV=prod mix popsicleboat.create_api_token jake \&amp;quot;blog\&amp;quot;'&amp;quot;&lt;/code&gt;. If you wanted one for your blog, I&amp;rsquo;d issue it to you. It&amp;rsquo;s shown once, you export it in your shell, and that&amp;rsquo;s the last time you think about it.&lt;/p&gt;
&lt;p&gt;2 - A script. &lt;code&gt;companion-thread&lt;/code&gt; is about a hundred lines of Python sitting in my blog&amp;rsquo;s repo. All it does is call one API endpoint with the post&amp;rsquo;s title and URL, then paste the thread URL it gets back into the front matter.&lt;/p&gt;
&lt;p&gt;3 - A build hook. I pasted my Netlify build-hook URL into my Popsicle Boat profile. That&amp;rsquo;s the whole &amp;ldquo;keeps itself current&amp;rdquo; trick! Netlify, Vercel, and Cloudflare Pages all take the same ping, so pretty much any static host works.&lt;/p&gt;
&lt;p&gt;I &lt;a href="https://jva.lol/weblog/easier-way-to-post-with-comments/"&gt;wrote earlier&lt;/a&gt; about getting this from ~5 steps down to about 2, at least after the initial setup: The token, the build hook, and the script to wire a new post with the URL. After that, you write, a script writes the thread&amp;rsquo;s URL into the front matter of the post. This is what those steps buy: write, push. The comments handle themselves.&lt;/p&gt;
&lt;p&gt;Caveat: This is what works for my (this) blog. The command for updating the Hugo front matter is specific to mine. But once the instrumentation is in place, it&amp;rsquo;s a really pleasing and clean process to post a new entry (like this one) with comments baked in.&lt;/p&gt;
&lt;p&gt;The setup for other blogs is laid out on &lt;a href="https://www.popsicleboat.com/comments"&gt;popsicleboat.com/comments&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>What's new, late July</title><link>https://jva.lol/weblog/whats-new-aboard-late-july/</link><pubDate>Fri, 24 Jul 2026 16:31:24 -0600</pubDate><guid>https://jva.lol/weblog/whats-new-aboard-late-july/</guid><description>New changes and improvements from the back half of July</description><content:encoded>&lt;p&gt;Here&amp;rsquo;s what&amp;rsquo;s been going on with popsicleboat the latter half of July 2026.&lt;/p&gt;
&lt;p&gt;1 - Background images on profiles. (The headline. A member can put a photo behind
their profile picture. It adds a little flavor to your profile, it shows as a strip on the profile page and fills the little
identity card in the sidebar.&lt;/p&gt;
&lt;p&gt;Fully optional; profiles without one look exactly
like before. Uploading got simpler at the same time: pick a file, see it
immediately, it saves itself — no Upload button, and the sidebar card updates
live. Using Phoenix LiveView, practically no friction to updating either your profile photo or your background photo. Both optional either way.&lt;/p&gt;
&lt;p&gt;2 - A tidier profile page. Your posts and replies now sit side by side. The
per-space groups are now collapsible. Reply excerpts render their markdown instead of
showing raw asterisks.&lt;/p&gt;
&lt;p&gt;3 - A Feedback link. Guests get an email link in the sidebar footer, signed-in
members get a direct line through the message dock. Either way feedback comes directly to me. If something&amp;rsquo;s broken or you&amp;rsquo;d like something to behave differently, just let me know whether you&amp;rsquo;rs signed in or not.&lt;/p&gt;
&lt;p&gt;Progress as usual, small improvements to quality of life for both users, potential users, and admins.&lt;/p&gt;</content:encoded></item><item><title>Easier way to post to my blog with comments already setup</title><link>https://jva.lol/weblog/easier-way-to-post-with-comments/</link><pubDate>Thu, 23 Jul 2026 02:31:46 -0600</pubDate><guid>https://jva.lol/weblog/easier-way-to-post-with-comments/</guid><description>This project already worked but it took ~5 steps to setup. It’s down to about 2 now.</description><content:encoded>&lt;p&gt;It&amp;rsquo;s wild, I&amp;rsquo;ve been building this using my own blog as a testing environment. It just keeps getting better. To be real and fair, there is a learning curve. But essentially where it stands now is you create an account on PopsicleBoat, you create and register an api key, and when you make a new post on your site you automatically get a comment section. Only if you want, per post, or not at all. You also own all the content, it&amp;rsquo;s a JSON file you own. PopsicleBoat could vanish and you&amp;rsquo;d still have those comments.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t know of any third party commenting system like this, which is why I built it.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s ad free, tracking free, matter of fact the whole spirit of it is to make the modern internet free of… well, lots of things. Just enjoyable again, but with the touch and niceties that technology advances afford. Like cool user interfaces.&lt;/p&gt;
&lt;p&gt;Anyway, the hurdle I noticed recently is that this particular offer had a steep learning curve (and let&amp;rsquo;s be honest, could still be steep). This post is just to say (more or less) that I&amp;rsquo;ve made strides to make it less steep. Testing it myself on my own blog was a little painful. Now it&amp;rsquo;s a little less painful.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re interested in the concept I&amp;rsquo;m here, all day, every day, answering every person who reaches out, and I&amp;rsquo;m as transparent as I can imagine one can be.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a work in progress but it&amp;rsquo;s come really far and is truly functional. I&amp;rsquo;m using it for this post itself.&lt;/p&gt;
&lt;p&gt;Hit me up. Or don&amp;rsquo;t. I&amp;rsquo;m happy if you even made it this far.&lt;/p&gt;
&lt;p&gt;Cheers&lt;/p&gt;
&lt;p&gt;-Jake&lt;/p&gt;</content:encoded></item><item><title>Adding a Claude skill to make a new blog entry discussion thread as easy as possible</title><link>https://jva.lol/weblog/a-skill-for-companion-threads/</link><pubDate>Wed, 22 Jul 2026 23:43:37 -0600</pubDate><guid>https://jva.lol/weblog/a-skill-for-companion-threads/</guid><description>In which I use a Claude skill to create a blog entry with a full comment section without a library</description><content:encoded>&lt;p&gt;I&amp;rsquo;ve written a Claude skill to make it easier to make a post here that has a comment section owned by this blog, but hosted and managed on Popsicle Boat. It&amp;rsquo;s, for lack of better phrasing, in alpha mode. It works. But it&amp;rsquo;s a process that is a little unappetizing. Still. It works.&lt;/p&gt;
&lt;p&gt;The idea is to make it as easy as possible. Right now it&amp;rsquo;s ~5 steps. I&amp;rsquo;m working on that. But the premise, to me, is valuable. People with online content who want interaction are encumbered usually with large libraries they have to bring in.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t know about you, but I miss the old simpler internet.&lt;/p&gt;
&lt;p&gt;With PopsicleBoat, not only can you have a comment section with just a few lines of code but you get moderation powers, and it all comes without ads or tracking. If you want that stuff it&amp;rsquo;s on you. You&amp;rsquo;re outsourcing discourse and commenting. For free.&lt;/p&gt;
&lt;p&gt;The challenge for me right now is making it even easier for you. It&amp;rsquo;s still an early project.&lt;/p&gt;
&lt;p&gt;BUT: it&amp;rsquo;s also a social space. There&amp;rsquo;s friend networks, instant messaging, video calls (be cool if it grew to video conferencing but that&amp;rsquo;s a lofty goal to be sure.)&lt;/p&gt;
&lt;p&gt;Anywho, this is Jake (the creator) testing some of it out. And… signing out. Peace.&lt;/p&gt;</content:encoded></item><item><title>Adding modern features: the collapsible/resizable sidebar</title><link>https://jva.lol/weblog/collapsible-sidebar/</link><pubDate>Wed, 22 Jul 2026 21:55:21 -0600</pubDate><guid>https://jva.lol/weblog/collapsible-sidebar/</guid><description>In which I discuss making the sidebar resizable and collapsible</description><content:encoded>&lt;p&gt;While I&amp;rsquo;ve been working on PopsicleBoat, I&amp;rsquo;ve been looking at every possible angle I can think of to make it bloated as hell (just kidding). No, it just occurred to me any website with an audience and a community and users etc needs the same kind of layout said audiences are used to. Including a collapsible nav sidebar. So, I focused on that. I think there&amp;rsquo;s room to improve, such as instead of fully hiding it could be a thin rail with icons but that will take additional attention since the sidebar currently does &lt;em&gt;not&lt;/em&gt; have icons. I&amp;rsquo;ll have to think about that.&lt;/p&gt;
&lt;p&gt;Anyway, I&amp;rsquo;ll skip the technical details. I&amp;rsquo;m just happy it&amp;rsquo;s working, you can resize it, collapse it entirely, or double click on the edge to restore it to default size.&lt;/p&gt;
&lt;p&gt;Pretty cool, huh?&lt;/p&gt;
&lt;p&gt;Just wanted to share my excitement.&lt;/p&gt;
&lt;p&gt;Cheers, ya&amp;rsquo;all!&lt;/p&gt;</content:encoded></item><item><title>I used AI - it was obvious</title><link>https://jva.lol/weblog/my-experiment-with-ai/</link><pubDate>Tue, 21 Jul 2026 00:00:00 +0000</pubDate><guid>https://jva.lol/weblog/my-experiment-with-ai/</guid><description>I got caught, and I’m going back to my own voice.</description><content:encoded>&lt;p&gt;I&amp;rsquo;ve been playing with AI lately. A lot of it has gone well, where the seams show is when I try to connect with real people.&lt;/p&gt;
&lt;h2 id="the-bump"&gt;
the bump
&lt;a class="anchor" href="#the-bump"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I sent a few cold emails, basically none of which landed well. Some a little repulsed. They detected the language wasn&amp;rsquo;t my own. In my defense I&amp;rsquo;m mostly just playing. Not trying to change the world. I just have a new shiny toy I can&amp;rsquo;t resist. Apologies to those who smelled someone selling something using language that wasn&amp;rsquo;t my own, especially given my self-professed love of the honest and raw internet.&lt;/p&gt;
&lt;h2 id="the-uncomfortable-part"&gt;
the uncomfortable part
&lt;a class="anchor" href="#the-uncomfortable-part"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I used AI. It was obvious to anyone who saw the text it generated. It is genuinely useful for lots of reasons, for code features, dependency upgrades, etc. I got carried away, but I mean, it &lt;em&gt;is&lt;/em&gt; a lot of fun. And I&amp;rsquo;ve been steered towards using it daily in my actual job. So, I forgive myself. I hope anyone (probably nobody) paying attention to my blog can forgive me.&lt;/p&gt;
&lt;h2 id="what-the-tell-actually-is"&gt;
what the tell actually is
&lt;a class="anchor" href="#what-the-tell-actually-is"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I myself am not skilled at detecting AI generated text. Let&amp;rsquo;s be honest, it&amp;rsquo;s usually pretty convincing. I know I&amp;rsquo;m not the only one who&amp;rsquo;s tried, else how would people have a sense for detecting it? The words, the em-dashes, the rhythm, composed metaphors, etc. The list goes on and on. I suppose someone could even (or maybe already has) write AI detection software. The real tell for me was feedback from others. People can smell AI slop. The feedback was valuable (not terribly rude, loud, or a lot, just honest). That feedback is what led to this post.&lt;/p&gt;
&lt;h2 id="finding-my-own-voice"&gt;
finding my own voice
&lt;a class="anchor" href="#finding-my-own-voice"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve written a lot on my blog before AI became a part of my daily life. It clearly has my own voice. I know because I personally did write it. None of it really got an audience, but that&amp;rsquo;s not the point either. The point is that I&amp;rsquo;m learning this strange new world and the scientist in me likes to play and experiment. The experiments of the last couple weeks have taught me something and I&amp;rsquo;ve internalized it. I need to use my own voice. Always.&lt;/p&gt;
&lt;h2 id="what-changed"&gt;
what changed
&lt;a class="anchor" href="#what-changed"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I don&amp;rsquo;t think AI is going away for anyone, I&amp;rsquo;ll still use it. But I&amp;rsquo;ve learned to use it appropriately. For instance, I asked it to generate the boilerplate for this post. But every word in it came from me. The boilerplate was convenient, the content is authentic.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve learned a lot, friends. That (in my view) is the point of experimentation.&lt;/p&gt;
&lt;p&gt;From here on out, you&amp;rsquo;ll never hear a word from me that didn&amp;rsquo;t come from my own brain. Including this. I&amp;rsquo;ll keep playing because (and don&amp;rsquo;t tell me you don&amp;rsquo;t too) it&amp;rsquo;s &lt;em&gt;fun&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Cheers&lt;/p&gt;</content:encoded></item><item><title>A glance is not a reading</title><link>https://jva.lol/weblog/a-glance-is-not-a-reading/</link><pubDate>Sun, 19 Jul 2026 15:09:00 -0600</pubDate><guid>https://jva.lol/weblog/a-glance-is-not-a-reading/</guid><description>In which ’new’ gets defined wrong twice before it gets defined right</description><content:encoded>&lt;p&gt;I added a little badge to the PopsicleBoat sidebar recently. It says something like &lt;strong&gt;All Posts · 13&lt;/strong&gt;, and up top there&amp;rsquo;s a list of what those 13 things are. I built it because I kept losing track of my own new posts. If the guy who made the site can&amp;rsquo;t find the new stuff, nobody else has a chance.&lt;/p&gt;
&lt;p&gt;The badge itself was easy. The hard part was one word: &lt;em&gt;new&lt;/em&gt;. Took me three tries to get it right.&lt;/p&gt;
&lt;p&gt;1 - The obvious idea. New means posted since you last visited. So you give each user a timestamp, stamp it when they open the board, and anything after that is new. Databases love this. It&amp;rsquo;s one column and one comparison, and it&amp;rsquo;s basically how half the software you use decides what to bold.&lt;/p&gt;
&lt;p&gt;Then I actually used it. I opened the board, clicked the first new post, read it, came back, and the whole list was gone. All thirteen. The badge still said 13 but the list under it was empty. Turns out opening the board had stamped my timestamp, so by the time I came back nothing was &amp;ldquo;since your last visit&amp;rdquo; anymore. I read one post and the system decided I&amp;rsquo;d seen all thirteen.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s kind of funny when you look at it. Just showing up counted as reading everything.&lt;/p&gt;
&lt;p&gt;2 - Next, sessions. Don&amp;rsquo;t let one visit wipe the list, hold it steady while you&amp;rsquo;re actually around and only move it forward after you&amp;rsquo;ve been gone a while. And it worked, sort of. The list survived a click and a return now. But then I opened a post, read it, came back, and the badge still said 13. And the post I just read was sitting right there in the list, still marked new, staring at me.&lt;/p&gt;
&lt;p&gt;Of course it was. I&amp;rsquo;d made the line move a little more politely but &amp;ldquo;new&amp;rdquo; was still about time. The system knew when I was on the board, it just had no idea what I actually read. Both versions had the same problem underneath: they watched the clock when they should have been watching the posts.&lt;/p&gt;
&lt;p&gt;3 - The one that stuck. A read is a fact about you and one post. Nothing more. So I made a little join table (this user read this post) and write a row the moment you open a thread. And suddenly everything just works. Open a post and the badge ticks down by one, right away. Go back to the board and that post is gone from the list, but the other twelve are still there waiting. Nothing you didn&amp;rsquo;t open gets checked off for you. I kept the old timestamp too, but only as a floor, so posts from before the feature even existed don&amp;rsquo;t clog up the count.&lt;/p&gt;
&lt;p&gt;I also added a &lt;em&gt;Mark all as read&lt;/em&gt; button, because every inbox turns into a chore eventually and sometimes you just want to wave the whole pile away. That one&amp;rsquo;s honest too. It&amp;rsquo;s you saying you&amp;rsquo;re done with them, not the system guessing because you happened to show up.&lt;/p&gt;
&lt;p&gt;The thing that gets me looking back is that I already knew the right answer. Not as a programmer, as a user. Every notification thing that&amp;rsquo;s ever annoyed me annoyed me for this exact reason. They all confused me being there with me paying attention. I just never bothered to think about it for popsicleboat until during testing a badge refused to count down twice in a row.&lt;/p&gt;
&lt;p&gt;Also, currently I&amp;rsquo;m basically the only user so I have to stress test it myself. I forgive me for missing it before. But, it&amp;rsquo;s fixed now!&lt;/p&gt;</content:encoded></item><item><title>What's new, mid-July</title><link>https://jva.lol/weblog/whats-new-aboard-mid-july/</link><pubDate>Sat, 18 Jul 2026 14:05:00 -0600</pubDate><guid>https://jva.lol/weblog/whats-new-aboard-mid-july/</guid><description>New changes and improvements this July</description><content:encoded>&lt;p&gt;A few new things on PopsicleBoat this week. Like always it&amp;rsquo;s all additions, bug fixes, etc. I post these for the people using it, but I&amp;rsquo;ll drop them here too.&lt;/p&gt;
&lt;p&gt;1 - Unread counts. The All Posts link in the sidebar now shows a badge with how many posts you haven&amp;rsquo;t read, and they&amp;rsquo;re listed at the top of the feed. Reading one clears just that one, and there&amp;rsquo;s a &amp;ldquo;Mark all as read&amp;rdquo; button for when it piles up. (I wrote up the surprisingly annoying part of getting that right &lt;a href="https://jva.lol/weblog/a-glance-is-not-a-reading/"&gt;here&lt;/a&gt;.) Once you&amp;rsquo;ve got a few spaces going, your home page opens with recent posts instead of the welcome page.&lt;/p&gt;
&lt;p&gt;2 - A website on your profile. There&amp;rsquo;s a website field now, for your blog or wherever you live online. It shows under your name so people know who you are. It&amp;rsquo;s got a &lt;code&gt;rel=&amp;quot;me&amp;quot;&lt;/code&gt; on it too, so if your site links back, Mastodon, etc, can verify it&amp;rsquo;s really you.&lt;/p&gt;
&lt;p&gt;3 - Reply notifications in the browser. You can get a browser notification when someone replies to you, without handing over an email address. It&amp;rsquo;s opt in, obviously. Your browser asks first, nothing personal leaves your machine, and if a reply lands while your laptop&amp;rsquo;s closed it&amp;rsquo;s waiting when you open it.&lt;/p&gt;
&lt;p&gt;4 - Alt text on media. When you attach an image you can give it alt text now, at upload or after, so screen readers can describe it.&lt;/p&gt;
&lt;p&gt;5 - Download your data. There&amp;rsquo;s a button in settings to download your stuff, profile and posts and replies and media links, all in one file. I don&amp;rsquo;t want anyone stuck here who doesn&amp;rsquo;t want to be.&lt;/p&gt;
&lt;p&gt;6 - One link for the comment-section thing. If you know someone with a blog who wants comments without running a comment system, popsicleboat.com/comments lays it all out on one page now.&lt;/p&gt;
&lt;p&gt;Basically all in the service of making things easier for you to use the whole project for your whole project, or just part, or none of it at all.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve been reading me, you probably picked up on the fact I&amp;rsquo;m mostly just having fun making it possible for the web to be easier for people like you to create for. If&amp;rsquo;n you want. ;)&lt;/p&gt;</content:encoded></item><item><title>The notification that gave up after a minute</title><link>https://jva.lol/weblog/the-notification-that-gave-up-after-a-minute/</link><pubDate>Fri, 17 Jul 2026 21:45:00 -0600</pubDate><guid>https://jva.lol/weblog/the-notification-that-gave-up-after-a-minute/</guid><description>In which four healthy-looking layers hide two quiet failures</description><content:encoded>&lt;p&gt;I added browser push notifications recently.&lt;/p&gt;
&lt;p&gt;Then I replied to one of my own posts from my phone, looked at my laptop, and saw nothing.&lt;/p&gt;
&lt;p&gt;The reply was on the site, everything else worked, like the inbox badge, notification email, etc. Just the browser push notification did not.&lt;/p&gt;
&lt;p&gt;I had given my browser permission to post notifications for my site, but didn&amp;rsquo;t realize by default that permission expires (I was using Brave, it might be different for other browsers).&lt;/p&gt;
&lt;p&gt;Gave it permission again with &amp;ldquo;forever&amp;rdquo; as the setting this time and banners worked. All was good for about an hour, until I noticed pushes still vanished whenever the browser wasn&amp;rsquo;t running. As it turns out, the library holds a closed browser&amp;rsquo;s message for only 60 seconds by default.&lt;/p&gt;
&lt;p&gt;The fix is one option:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-elixir" data-lang="elixir"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;send_notification(payload, message, &lt;span style="color:#e6db74"&gt;ttl&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;86_400&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I set the send notification ttl to a day. That should, depending on the user&amp;rsquo;s preference, maintain the message across closing the browser for instance.&lt;/p&gt;
&lt;p&gt;I hope this feature is useful, if not it&amp;rsquo;s opt in anyway. As all notifications should be.&lt;/p&gt;</content:encoded></item><item><title>The page that rebuilds itself</title><link>https://jva.lol/weblog/the-page-that-rebuilds-itself/</link><pubDate>Mon, 13 Jul 2026 11:45:00 -0600</pubDate><guid>https://jva.lol/weblog/the-page-that-rebuilds-itself/</guid><description>In which the deploy habit stops being the bottleneck</description><content:encoded>&lt;p&gt;&lt;a href="https://jva.lol/weblog/your-site-can-keep-the-comments/"&gt;Last time&lt;/a&gt;, I added a feature so my blog can print its comments into the page at build time — plain JSON fetched while &lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt; (how I build this blog) runs, rendered as paragraphs with no extra JS or any other dependency. The result is that the conversation only gets updated when you deploy. Which is fine if you push daily, and less fine when a good reply lands on Tuesday and your next deploy is Saturday.&lt;/p&gt;
&lt;p&gt;Now that is more robust.&lt;/p&gt;
&lt;h2 id="the-mechanic"&gt;
The mechanic
&lt;a class="anchor" href="#the-mechanic"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Most static hosts already have the missing piece. Netlify, Vercel, and Cloudflare Pages for instance all offer &lt;em&gt;build hooks&lt;/em&gt; — they hand you a URL, and anything that POSTs to it triggers a rebuild.&lt;/p&gt;
&lt;p&gt;So I added a field to &lt;a href="https://popsicleboat.com"&gt;Popsicle Boat&lt;/a&gt; in account settings: your build hook. When a reply lands on any thread you created the hook gets called if you have it set. A couple of minutes later, your site has rebuilt itself, and the new reply is sitting on your page.&lt;/p&gt;
&lt;h2 id="the-loop-end-to-end"&gt;
The loop, end to end
&lt;a class="anchor" href="#the-loop-end-to-end"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Someone replies to a thread.&lt;/li&gt;
&lt;li&gt;A little debouncing, it waits about two minutes for the conversation to settle, then POSTs the hook.&lt;/li&gt;
&lt;li&gt;The host rebuilds. Your build fetches the thread&amp;rsquo;s &lt;code&gt;/replies.json&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The page now carries the new conversation — permanent, indexable, in the HTML.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;At no point does anything run in a reader&amp;rsquo;s browser.&lt;/p&gt;
&lt;h2 id="this-page-is-the-demo"&gt;
This page is the demo
&lt;a class="anchor" href="#this-page-is-the-demo"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;This post has a companion thread, and my build hook is wired. Reply to it, and the page you&amp;rsquo;re reading will quietly rebuild and print your words below.&lt;/p&gt;
&lt;p&gt;If you run a blog (or any site with a need or desire for comments) and want this arrangement the whole thing is documented at &lt;a href="https://www.popsicleboat.com/for-bloggers"&gt;popsicleboat.com/for-bloggers&lt;/a&gt;. One link on your site, one URL in your settings, nothing to uninstall.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m pretty proud of it, it&amp;rsquo;s working like magic for this blog. At least to my eyes.&lt;/p&gt;</content:encoded></item><item><title>Putting the boat on a diet</title><link>https://jva.lol/weblog/putting-the-boat-on-a-diet/</link><pubDate>Sun, 12 Jul 2026 19:45:00 -0600</pubDate><guid>https://jva.lol/weblog/putting-the-boat-on-a-diet/</guid><description>In which 843 kilobytes become 468, and the biggest weight isn’t the JavaScript</description><content:encoded>&lt;p&gt;A fundamental premise for popsicleboat is no ads, no tracking, no scripts riding along on your site if you host your comments there. Also, it should be as lightweight as possible without sacrificing features. It occurred to me to check what happens when I use it for comments (a main feature) on this, my site.&lt;/p&gt;
&lt;p&gt;I measured a logged-out thread page. &lt;strong&gt;843 KB&lt;/strong&gt;. For what? So I dug in.&lt;/p&gt;
&lt;h2 id="the-ledger"&gt;
The ledger
&lt;a class="anchor" href="#the-ledger"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Bytes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;JavaScript&lt;/td&gt;
&lt;td&gt;325 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Images&lt;/td&gt;
&lt;td&gt;276 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CSS&lt;/td&gt;
&lt;td&gt;229 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTML&lt;/td&gt;
&lt;td&gt;13 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="cut-one-the-call-system-nobody-logged-out-can-use"&gt;
Cut one: the call system nobody logged-out can use
&lt;a class="anchor" href="#cut-one-the-call-system-nobody-logged-out-can-use"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;A third of the JavaScript was the WebRTC video-calling machinery, so signaling, peer connections, reconnect logic, the call dock, etc. All of it shipped to readers who can&amp;rsquo;t place a call, because calling requires an account.&lt;/p&gt;
&lt;p&gt;The fix was a webpack dynamic import: the entire call system moved into a chunk that only loads when the page carries a signed-in signal.&lt;/p&gt;
&lt;h2 id="cut-two-a-40-pixel-logo-served-as-a-giant-png"&gt;
Cut two: a 40-pixel logo served as a giant PNG
&lt;a class="anchor" href="#cut-two-a-40-pixel-logo-served-as-a-giant-png"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The header logo is an ankh about 40 pixels tall. It was being served as a 923×1352 PNG, twice, a light variant and a dark one. That&amp;rsquo;s 244 KB for a tiny glyph. One ImageMagick command took it to 9 KB. I&amp;rsquo;d been busy tuning the JavaScript I found interesting while the real weight was three files I hadn&amp;rsquo;t looked at since the beginning.&lt;/p&gt;
&lt;h2 id="the-ledger-after"&gt;
The ledger, after
&lt;a class="anchor" href="#the-ledger-after"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Stored&lt;/th&gt;
&lt;th&gt;On the wire&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;JavaScript&lt;/td&gt;
&lt;td&gt;213 KB&lt;/td&gt;
&lt;td&gt;65 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CSS&lt;/td&gt;
&lt;td&gt;217 KB&lt;/td&gt;
&lt;td&gt;39 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Images&lt;/td&gt;
&lt;td&gt;24 KB&lt;/td&gt;
&lt;td&gt;13 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTML&lt;/td&gt;
&lt;td&gt;13 KB&lt;/td&gt;
&lt;td&gt;13 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;468 KB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~130 KB&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A Phoenix LiveView social app with a video-calling system and live chatting, invisible until you sign in, now costs a reader less transfer than most sites spend on web fonts.&lt;/p&gt;
&lt;p&gt;The details of untangling the JS are a little boring, so if you&amp;rsquo;re reading this know I deliberately spare you those. This is just a summary of what I found and how it is better now. I don&amp;rsquo;t want anyone to feel obligated to anything, but I want everyone to feel free to enjoy without bloat.&lt;/p&gt;</content:encoded></item><item><title>Your site can keep the comments</title><link>https://jva.lol/weblog/your-site-can-keep-the-comments/</link><pubDate>Sun, 12 Jul 2026 19:30:00 -0600</pubDate><guid>https://jva.lol/weblog/your-site-can-keep-the-comments/</guid><description>In which the comment section learns to come home</description><content:encoded>&lt;p&gt;&lt;a href="https://jva.lol/weblog/popsicle-boat-as-a-comment-section/"&gt;The last post about this&lt;/a&gt; describes the arrangement. For instance, this blog has no comment system of its own. Posts here with a comment section (optional for each post, not sitewide) link to a thread on &lt;a href="https://popsicleboat.com"&gt;Popsicle Boat&lt;/a&gt;. There&amp;rsquo;s just one anchor tag, no JavaScript or third-party library loaded in the reader&amp;rsquo;s browser.&lt;/p&gt;
&lt;h2 id="build-time-not-run-time"&gt;
Build time, not run time
&lt;a class="anchor" href="#build-time-not-run-time"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Every thread on the boat now publishes its public replies as plain JSON. It&amp;rsquo;s stored as the thread&amp;rsquo;s address plus &lt;code&gt;/replies.json&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;thread&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;The panel that closed itself&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;https://www.popsicleboat.com/c/blogging/posts/175&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;reply_count&amp;#34;&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;replies&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;author&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;jake&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;body_html&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;lt;p&amp;gt;Test&amp;lt;/p&amp;gt;&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;posted_at&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;2026-07-12T23:53:45Z&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;https://www.popsicleboat.com/c/blogging/posts/175#reply-176&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A static site fetches that while it builds and prints the conversation into the page as ordinary HTML. This blog&amp;rsquo;s &lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt; template does it in about ten lines:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;with&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;try&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;resources&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;.GetRemote&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;printf&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;%s/replies.json&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;.Params.popsicleboat&lt;/span&gt;&lt;span style="color:#f92672"&gt;))&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;and&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;not&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;.Err&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;.Value&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;$replies&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;.Value.Content&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;transform&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;.Unmarshal&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;range&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;$replies&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;.replies&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;article&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;boat-reply&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;p&lt;/span&gt;&amp;gt;&amp;lt;&lt;span style="color:#f92672"&gt;strong&lt;/span&gt;&amp;gt;&lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;.author&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;strong&lt;/span&gt;&amp;gt; · &amp;lt;&lt;span style="color:#f92672"&gt;a&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;href&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;.url&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&amp;gt;&lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;dateFormat&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;January 2, 2006&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;time&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;.posted_at&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;a&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style="color:#f92672"&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;.body_html&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;safeHTML&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/&lt;span style="color:#f92672"&gt;article&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="what-this-actually-changes"&gt;
What this actually changes
&lt;a class="anchor" href="#what-this-actually-changes"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Reading happens at home. Your blog is where the conversation is read. Popsicle Boat is where it happens. Readers who want to say something click through to Popsicle Boat. You keep full moderation control there without running any comment infrastructure yourself.&lt;/p&gt;
&lt;p&gt;Your site owns all the data. Every build, your site writes its own copy of every conversation. If popsicleboat just died for some reason, the comments on your site would still be right there in your HTML.&lt;/p&gt;
&lt;p&gt;Fresh replies appear on your next build. Static sites rebuild all the time; the conversation is always as up to date as your deploy habit, and the live thread is one click away.&lt;/p&gt;
&lt;p&gt;The comments come home, you have nothing to maintain. No annoyances, no ads, no cookies, no banners.&lt;/p&gt;</content:encoded></item><item><title>The panel that closed itself</title><link>https://jva.lol/weblog/the-panel-that-closed-itself/</link><pubDate>Sat, 11 Jul 2026 01:00:00 -0600</pubDate><guid>https://jva.lol/weblog/the-panel-that-closed-itself/</guid><description>In which a disclosure panel shuts every time someone types a letter</description><content:encoded>&lt;p&gt;I made it so posts can live in multiple spaces: An &amp;ldquo;Also show in&amp;rdquo; panel of checkboxes lets it appear in others. A lot of checkboxes is a lot of form, so that added complexity.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-heex" data-lang="heex"&gt;&amp;lt;details class=&amp;#34;post-form__also-interests&amp;#34;&amp;gt;
&amp;lt;summary&amp;gt;&amp;lt;%= t(&amp;#34;Also show in&amp;#34;) %&amp;gt;&amp;lt;/summary&amp;gt;
&amp;lt;div class=&amp;#34;post-form__also-interests-options&amp;#34;&amp;gt;
&amp;lt;%= for interest &amp;lt;- @also_interest_options do %&amp;gt;
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I found the bug while using the picker myself making the discussion thread for the &lt;a href="https://jva.lol/weblog/popsicle-boat-as-a-comment-section/"&gt;previous post here&lt;/a&gt;. Open the panel, check a box, and the panel snaps shut. Open it again, check another box, shut again. Collapsed, it gives no sign anything is selected at all. This was a problem.&lt;/p&gt;
&lt;h2 id="the-bug"&gt;
The bug
&lt;a class="anchor" href="#the-bug"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The last panel bug on this blog was &lt;a href="https://jva.lol/weblog/the-panel-that-hid-itself/"&gt;a race&lt;/a&gt; — three timers and a duplicate event, reproducible twice in many runs. This one is the opposite: perfectly deterministic, wrong every single time, and visible the moment you know where to look.&lt;/p&gt;
&lt;p&gt;So reproducible it was (relatively) easy to write a smoke test for it.&lt;/p&gt;
&lt;p&gt;A &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; element&amp;rsquo;s &lt;code&gt;open&lt;/code&gt; attribute is written by the browser when the user clicks the summary. The server never hears about it. Meanwhile the composer is a LiveView form with live validation — every keystroke and every checkbox change makes a round trip, the server re-renders, and the patcher re-syncs the DOM to the server&amp;rsquo;s HTML. The server&amp;rsquo;s HTML has no &lt;code&gt;open&lt;/code&gt; attribute, so the patcher removes it. Typing a single letter in the title field also closed the panel.&lt;/p&gt;
&lt;h2 id="the-fix"&gt;
The fix
&lt;a class="anchor" href="#the-fix"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Give the boolean to the server.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-heex" data-lang="heex"&gt;&amp;lt;button type=&amp;#34;button&amp;#34; phx-click=&amp;#34;toggle_also_interests&amp;#34;
aria-expanded={to_string(@also_picker_open?)}&amp;gt;
&amp;lt;%= t(&amp;#34;Also show in&amp;#34;) %&amp;gt;
&amp;lt;%= if names != [] do %&amp;gt;
&amp;lt;span&amp;gt;&amp;lt;%= Enum.join(names, &amp;#34;, &amp;#34;) %&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;% end %&amp;gt;
&amp;lt;/button&amp;gt;
&amp;lt;div hidden={!@also_picker_open?}&amp;gt;
... the checkboxes ...
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The checkbox list is hidden when collapsed, not conditionally rendered. Inputs that leave the DOM leave the form, and a reader who collapses the panel before submitting doesn&amp;rsquo;t silently lose their picks.&lt;/p&gt;
&lt;p&gt;Bug fixed, time for a beer.&lt;/p&gt;</content:encoded></item><item><title>Popsicle Boat as a comment section</title><link>https://jva.lol/weblog/popsicle-boat-as-a-comment-section/</link><pubDate>Fri, 10 Jul 2026 10:00:00 -0600</pubDate><guid>https://jva.lol/weblog/popsicle-boat-as-a-comment-section/</guid><description>In which a blog gets discussions with no ads and no trackers, one link per post</description><content:encoded>&lt;p&gt;The usual ways to put comments on a blog: a third-party widget, a self-hosted comment server, or silence. I can respect the choice for silence. Self-hosting means running a spam-fighting service forever. And a third-party widget means bloat which adds weight to the loading of your site.&lt;/p&gt;
&lt;p&gt;This blog does a fourth thing, and any blog can use what it uses.&lt;/p&gt;
&lt;h2 id="the-pattern"&gt;
The pattern
&lt;a class="anchor" href="#the-pattern"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;A post that wants a discussion gets a thread on &lt;a href="https://popsicleboat.com"&gt;Popsicle Boat&lt;/a&gt;, and the post links to it. That&amp;rsquo;s the entire integration:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="color:#f92672"&gt;a&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;href&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;https://www.popsicleboat.com/c/programming/posts/168&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Discuss this post on Popsicle Boat →
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;a&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="what-the-readers-browser-sees"&gt;
What the reader&amp;rsquo;s browser sees
&lt;a class="anchor" href="#what-the-readers-browser-sees"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Nothing. A link is inert. There is no script, no iframe, no cookie, nothing for a content blocker to block, no consent banner. The blog page stays exactly as private as it was.&lt;/p&gt;
&lt;p&gt;Following the link lands on a public thread: reading requires no account, replying takes a free one. Popsicle Boat itself carries no ads and loads no third-party scripts.&lt;/p&gt;
&lt;h2 id="steps-for-any-blog-on-any-stack"&gt;
Steps, for any blog on any stack
&lt;a class="anchor" href="#steps-for-any-blog-on-any-stack"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Make an account at popsicleboat.com.&lt;/li&gt;
&lt;li&gt;Find a space that fits your post&amp;rsquo;s topic, or propose one.&lt;/li&gt;
&lt;li&gt;Post there about your article.&lt;/li&gt;
&lt;li&gt;Copy the thread&amp;rsquo;s URL and link it from your article.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Repeat per post. Moderation is already whatever you can do with your own posts.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;d rather skip the setup, &lt;a href="https://www.popsicleboat.com/for-bloggers"&gt;popsicleboat.com/for-bloggers&lt;/a&gt; is the short version: send your blog&amp;rsquo;s address and you get a space for it the same day.&lt;/p&gt;
&lt;h2 id="why-a-link-and-not-a-widget"&gt;
Why a link and not a widget
&lt;a class="anchor" href="#why-a-link-and-not-a-widget"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I tried the widget version. I had an embedded iframe mirroring the thread onto the blog and removed it. Replies written for a community read strangely when syndicated somewhere else, and an embed is one more thing a reader&amp;rsquo;s browser has to trust.&lt;/p&gt;
&lt;p&gt;The simple link I have now asks nothing.&lt;/p&gt;
&lt;h2 id="a-nicety-for-static-sites"&gt;
A nicety for static sites
&lt;a class="anchor" href="#a-nicety-for-static-sites"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Threads are posts, and posts sometimes get deleted. So the build checks. It fetches each linked thread and only prints the link if the thread is still there. Delete a thread and the link just disappears, no dead end for a reader.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go-html-template" data-lang="go-html-template"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;with&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;.Params.popsicleboat&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;with&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;try&lt;/span&gt; &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;resources&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;.GetRemote&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;.&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;not&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;.Err&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;p&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;boat-discuss&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="color:#f92672"&gt;a&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;href&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;$.Params.popsicleboat&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&amp;gt;Discuss this post on Popsicle Boat &amp;amp;rarr;&amp;lt;/&lt;span style="color:#f92672"&gt;a&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/&lt;span style="color:#f92672"&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;{{&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;end&lt;/span&gt; &lt;span style="color:#75715e"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That&amp;rsquo;s the whole system. No ad network, no analytics script, and the conversation happens somewhere built for conversations. No anchor tag for tracking anyone.&lt;/p&gt;
&lt;p&gt;I hope you find it useful, again it&amp;rsquo;s all in the spirit of getting back an internet that is simple. No bloat. Just communication.&lt;/p&gt;</content:encoded></item><item><title>What's new</title><link>https://jva.lol/weblog/whats-new-aboard/</link><pubDate>Fri, 10 Jul 2026 00:45:00 -0600</pubDate><guid>https://jva.lol/weblog/whats-new-aboard/</guid><description>Added some new features: formatting, search, feeds, and notifications when someone replies</description><content:encoded>&lt;p&gt;Everything works the way it did before — these are additions, nothing you need to relearn.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your words can dress up now.&lt;/strong&gt; Posts, replies, and messages understand simple formatting: **bold**, *italic*, `code`, lists, quotes. Paste a link and it turns clickable on its own. There&amp;rsquo;s a small &amp;ldquo;Formatting tips&amp;rdquo; note under every writing box if you want the cheat sheet, and a &lt;strong&gt;Preview&lt;/strong&gt; button right next to it that shows exactly how your words will land before you post them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You can search.&lt;/strong&gt; The box at the top of the sidebar finds posts, replies, and spaces — anything you could browse to, findable in a few keystrokes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll know when someone replies.&lt;/strong&gt; Your inbox has a new &amp;ldquo;Replies to you&amp;rdquo; section, and the inbox badge lights up when something&amp;rsquo;s waiting.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You can follow with RSS.&lt;/strong&gt; Every space now has an RSS feed, and the whole site has one at &lt;a href="https://popsicleboat.com/feed.xml"&gt;popsicleboat.com/feed.xml&lt;/a&gt;. If you use a feed reader, paste any Popsicle Boat page into it and the feed shows up on its own. It&amp;rsquo;s a nice way to share a space with a friend who isn&amp;rsquo;t ready to sign up. They can follow along from their reader until they want to say something.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s the batch. If something feels off, reply and tell me. A real person (me) reads every word.&lt;/p&gt;</content:encoded></item><item><title>The panel that hid itself</title><link>https://jva.lol/weblog/the-panel-that-hid-itself/</link><pubDate>Tue, 07 Jul 2026 18:00:00 -0600</pubDate><guid>https://jva.lol/weblog/the-panel-that-hid-itself/</guid><description>In which a video call connects perfectly and its panel hides anyway</description><content:encoded>&lt;p&gt;PopsicleBoat has video calling. One person clicks call, the other gets a little toast notification, and they answer or they don&amp;rsquo;t (or they miss it entirely). If they answer, WebRTC does its thing through NAT, with a STUN server and a TURN server, one of each for now. I&amp;rsquo;ll add more if I ever need to.&lt;/p&gt;
&lt;p&gt;Most of that lived in one file, app.js, which had gotten to 6,371 lines. This is about a bug in there and how long it took me to find it.&lt;/p&gt;
&lt;h2 id="the-bug"&gt;
The bug
&lt;a class="anchor" href="#the-bug"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve got a browser test that runs before I deploy. It opens two real browsers, starts a call from one, and answers it from the other. Twice, out of a lot of runs (like… hundreds), it failed in a weird way. The call connected fine, video going both ways, everything working, except the call panel was hidden. A working call with no interface. Not every time, not even often. Just twice.&lt;/p&gt;
&lt;p&gt;An intermittent bug in code that&amp;rsquo;s juggling timers, WebSockets, WebRTC callbacks, and a DOM patcher. That&amp;rsquo;s a race, pretty much guaranteed.&lt;/p&gt;
&lt;h2 id="finding-it"&gt;
Finding it
&lt;a class="anchor" href="#finding-it"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;You can&amp;rsquo;t really put a breakpoint on &amp;ldquo;sometimes.&amp;rdquo; Something was setting &lt;code&gt;hidden&lt;/code&gt; on the panel after the answer, and there were a few things that could&amp;rsquo;ve done it: my own show/hide helpers, the retry logic around the ring, and LiveView&amp;rsquo;s &lt;a href="https://github.com/patrick-steele-idem/morphdom"&gt;morphdom&lt;/a&gt; patcher, which quietly re-syncs the DOM back to whatever the server rendered.&lt;/p&gt;
&lt;p&gt;That last one doesn&amp;rsquo;t show up when you just read the code, so it&amp;rsquo;s easy to forget it&amp;rsquo;s even there.&lt;/p&gt;
&lt;p&gt;So I added some logging. It wraps every place I legitimately change the panel&amp;rsquo;s visibility, and separately watches for the panel changing from anywhere at all. Every time the visibility changes, it logs who did it. If something changed and there&amp;rsquo;s no matching entry from my own code, that&amp;rsquo;s an outside write, which basically means morphdom. I also tagged each panel with a serial number so I could tell a panel that got patched apart from one that got swapped out entirely. The log just piles up on a window global and waits for the bug to happen again.&lt;/p&gt;
&lt;p&gt;I figured it was morphdom. A patcher whose whole job is rewriting attributes to match the server is exactly the kind of thing that hides a panel, and honestly I added the logging mostly to catch it. Turned out it was innocent. Its writes were all re-syncs to the right state. The writes that actually broke things had my name on them. The call was coming from my own code.&lt;/p&gt;
&lt;h2 id="the-race"&gt;
The race
&lt;a class="anchor" href="#the-race"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Three steps, and the ends are about six seconds apart.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A ring event comes in and kicks off a prepare loop for the panel, a retry that runs for up to six seconds making sure the incoming-call UI is ready.&lt;/li&gt;
&lt;li&gt;The user answers. That clears the ring alert and shows the in-call panel. Good so far.&lt;/li&gt;
&lt;li&gt;A duplicate of the ring event shows up late (these aren&amp;rsquo;t guaranteed to be unique) and its handler re-remembers the ring alert before it gets to the check for whether the call was already answered. That wakes up a prepare tick still pending from step 1, which does exactly what it was told to: hides the panel and marks it &lt;code&gt;incoming&lt;/code&gt;. A state sync later puts the call back to &lt;code&gt;in_call&lt;/code&gt;, but nothing ever tells the panel to show again.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Everything here worked correctly. The retry loop retried like it should. The duplicate handler did catch the duplicate, just one line too late. The state sync synced the state, but the panel&amp;rsquo;s visibility wasn&amp;rsquo;t part of the state it was syncing. Nothing was broken on its own. The bug only existed in the order it all ran.&lt;/p&gt;
&lt;h2 id="the-fix"&gt;
The fix
&lt;a class="anchor" href="#the-fix"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Two guards, either one of which would&amp;rsquo;ve been enough by itself. The prepare tick now skips any panel that&amp;rsquo;s already accepted, answering, or in a call. And the duplicate-ring handler bails out before re-remembering the alert if the call&amp;rsquo;s already been answered. I pinned both with regression tests that grep the source, since the bug was an ordering between lines, not a wrong output I could assert on.&lt;/p&gt;
&lt;h2 id="the-file"&gt;
The file
&lt;a class="anchor" href="#the-file"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The 6,371 lines were really the other half of the problem. A race like this hides easy in a file where the signaling, the media, the DOM, and the timers are all sharing one scope. app.js is down to 2,156 lines now. The call stuff moved out into thirty smaller modules. The main piece is a state machine for the call lifecycle, a plain reducer, &lt;code&gt;transition(state, event) -&amp;gt; { state, actions }&lt;/code&gt;, with no DOM, no peer connection, no timers in it. It replaced about seven booleans I&amp;rsquo;d been keeping in sync by hand. And there&amp;rsquo;s one rule for duplicates now: every call has a key, and remote events with the wrong key just get ignored, which took the place of all the per-message dedup flags. The side effects come back as a list of named actions for the caller to run, so the whole lifecycle, including the kind of ordering that caused this, is something I can actually unit test now.&lt;/p&gt;
&lt;p&gt;This was a hell of a journey, deeply hidden bug inside a huge JS file that I had to pull apart and split up before I could identify where things were going wrong. I got it now though, web calling works. I&amp;rsquo;m testing it daily, and it&amp;rsquo;s a lot of work but fixing things is so much fun I can&amp;rsquo;t resist. (I might need my head examined lol)&lt;/p&gt;</content:encoded></item><item><title>Popsicle Boat</title><link>https://jva.lol/weblog/popsicle-boat/</link><pubDate>Sun, 05 Jul 2026 18:30:00 -0600</pubDate><guid>https://jva.lol/weblog/popsicle-boat/</guid><description>In which I finally write about the social web project I’ve been quietly building since 2019</description><content:encoded>&lt;p&gt;If you&amp;rsquo;ve looked at the front page of this site lately, you may have noticed a little card pointing at &lt;a href="https://popsicleboat.com"&gt;popsicleboat.com&lt;/a&gt;. I&amp;rsquo;ve been building Popsicle Boat and have never actually written about it here. Time to fix that.&lt;/p&gt;
&lt;h2 id="what-it-is"&gt;
What it is
&lt;a class="anchor" href="#what-it-is"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Popsicle Boat is a small social web project. The short version I keep coming back to: &lt;strong&gt;low-friction posting, real conversation, and keeping personal spaces on the internet playful.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Instead of one giant feed, Popsicle Boat is organized around spaces, each a shared place where people can post work, ask questions, share notes, and keep up with what others are making. A few things I care about in how those spaces behave:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spaces are open to browse, so you can get a feel for a place before joining in.&lt;/li&gt;
&lt;li&gt;Following a space keeps it close at hand and makes it easy to return to active discussions.&lt;/li&gt;
&lt;li&gt;Anyone can propose a new space, or just follow the ones that fit what they care about.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Around that core there are the things you&amp;rsquo;d hope for from a small social site: profiles, replies and likes, private messages, friend discovery, and invitations for bringing people onboard.&lt;/p&gt;
&lt;h2 id="why-bother-building-a-social-network-in-this-day-and-age"&gt;
Why bother building a social network in this day and age
&lt;a class="anchor" href="#why-bother-building-a-social-network-in-this-day-and-age"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The big platforms optimize for scale, and scale has a way of making everything feel the same. I wanted something closer to the small-forum internet I grew up with, where a space could have its own personality and posting something didn&amp;rsquo;t feel like a performance. I also wanted it to feel modern, so there&amp;rsquo;s (to my eye) a smooth design, with both light and dark modes, text and video chat, and a lot more.&lt;/p&gt;
&lt;h2 id="how-its-built"&gt;
How it&amp;rsquo;s built
&lt;a class="anchor" href="#how-its-built"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Under the hood it&amp;rsquo;s a DIY special.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Elixir and Phoenix&lt;/strong&gt;, with LiveView for the interactive surfaces (feeds, replies, likes, uploads) and plain controller-rendered pages for everything that doesn&amp;rsquo;t need to be clever.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Postgres&lt;/strong&gt; underneath.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fly.io&lt;/strong&gt; for hosting, with deploys gated behind an embarrassingly large pile of predeploy checks and browser smoke tests.&lt;/li&gt;
&lt;li&gt;Internationalization from early on.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Crypto</title><link>https://jva.lol/haikulog/crypto/</link><pubDate>Thu, 20 May 2021 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/crypto/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;Crypto is funny&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a perfect solution&lt;/p&gt;
&lt;p&gt;To patience and shame&lt;/p&gt;
&lt;p&gt;&lt;video autoplay loop muted playsinline preload="metadata" src="https://jva.lol/haikulog/crypto/giphy.mp4" aria-label="Beer"&gt;&lt;/video&gt;&lt;/p&gt;</content:encoded></item><item><title>Pony Express</title><link>https://jva.lol/weblog/pony-express/</link><pubDate>Mon, 17 May 2021 19:10:13 -0600</pubDate><guid>https://jva.lol/weblog/pony-express/</guid><description>In which I describe our trip along the Pony Express route</description><content:encoded>&lt;h1 id="our-pony-express-adventure"&gt;
Our Pony Express Adventure &lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;a class="anchor" href="#our-pony-express-adventure"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;This weekend we sort of stumbled on some incredible things. The idea was to visit &lt;a href="https://en.wikipedia.org/wiki/Topaz_Mountain"&gt;Topaz Mountain&lt;/a&gt;, do some digging and hopefully find some topaz (we did), and camp for the night before moving on to the &lt;a href="https://en.wikipedia.org/wiki/Deep_Creek_Mountains"&gt;Deep Creek mountain range&lt;/a&gt; to see some of the most dramatic mountains in the west desert (12,000 feet! The highest peak in Utah, King&amp;rsquo;s Peak, is only a little higher at 13,500). From there we would drive up to Wendover, and then home.&lt;/p&gt;
&lt;div class="book-columns flex flex-wrap"&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/weblog/pony-express/IMG_2317_hu_355efb0e9eb3c9d8.jpg"
width="480" height="360" loading="lazy" decoding="async" alt="The Lobst3r" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/weblog/pony-express/IMG_2318_hu_8e6aafae1022d466.jpg"
width="480" height="162" loading="lazy" decoding="async" alt="Topaz Mountain" /&gt;
&lt;img src="https://jva.lol/weblog/pony-express/IMG_2319_hu_11b27e2d02eb48e.jpg"
width="480" height="146" loading="lazy" decoding="async" alt="A random mine" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Well, along the way we ended up exploring the &lt;a href="https://en.wikipedia.org/wiki/Fish_Springs_National_Wildlife_Refuge"&gt;Fish Springs National Wildlife Refuge&lt;/a&gt;. We intended to stop by this place on the way through, but neither of us expected what we found. This place is like some kind of heaven. It&amp;rsquo;s unreal. First of all, the area is simply massive. We thought it would be some large kind of oasis, but it actually takes an area that looks comparable to the entire Salt Lake valley. It&amp;rsquo;s just huge. And it&amp;rsquo;s teeming with avian life. This was May, of course, so it may seem different at other times of the year but for us it was almost otherworldly. In fact, at one point we talked about how it would be to encounter an earth like planet untouched by human kind- and how this must be what that would be like. Of course, we were driving through it violating the peace as humans do. But there was a very real and tangible sense that given the chance for an idyllic existence, life might look something like what we saw there.&lt;/p&gt;
&lt;p&gt;As amazing as the wildlife refuge was, the best part of the trip was still to come.&lt;/p&gt;
&lt;p&gt;We decided that after crossing the desert to get to the refuge we had used more gas than we would like. This led to some discussion about what would happen if we ran out of gas in the middle of the Nevada desert, and some quick estimates around the likelihood of finding a gas station along the way. We decided to scrap the Deep Creek mountains, and follow the Pony Express route east. So, we left the wildlife refuge (sad face).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jva.lol/weblog/pony-express/IMG_2324_hu_10b09bf10b255196.jpg"
width="480" height="360" loading="lazy" decoding="async" alt="Miaoru on an old watering trough" /&gt;&lt;/p&gt;
&lt;p&gt;The first Pony Express marker we found was at Black Rock. It&amp;rsquo;s basically a black rock in the desert. We noticed a significant amount of animal pellets, and traced them to a pile of dirt with the signature marks of some mammalian subterranean creatures. We kept moving.&lt;/p&gt;
&lt;p&gt;The rest of the drive was both indescribably beautiful and featureless in the way that the fade of a cloudless sunset from blue to crimson is. Well, not entirely featureless. (I&amp;rsquo;m not going to talk about the &lt;a href="https://geology.utah.gov/popular/places-to-go/rock-mineral-collecting-sites/the-rockhounder-dugway-geode-beds-juab-county/"&gt;Dugway Geode Beds&lt;/a&gt;. It was cool, but there&amp;rsquo;s not much else to say. Either you&amp;rsquo;re into geodes or you aren&amp;rsquo;t.)&lt;/p&gt;
&lt;p&gt;We were coming up on the Pony express marker number 86 when we saw a large herd of horses. &amp;ldquo;That&amp;rsquo;s cool,&amp;rdquo; we thought. We got closer. There was no fence guarding this dirt road. There was no ranch here. In fact, for hundreds of miles as far as we knew all of this beautiful land was public. These were &lt;em&gt;wild horses&lt;/em&gt;. I had never seen wild horses before, and I certainly didn&amp;rsquo;t have any expectation of seeing them on this particular trip. Here we were, with a handful of inviolate majestic beasts nearly an arms reach away as we pulled up in my Jeep and these animals weren&amp;rsquo;t so much as bothered to take notice of us. (no, I didn&amp;rsquo;t take any pictures and no I&amp;rsquo;m not sad about that.)&lt;/p&gt;
&lt;div class="book-columns flex flex-wrap"&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/weblog/pony-express/IMG_2328_hu_5327f3ef04fa264e.jpg"
width="480" height="360" loading="lazy" decoding="async" alt="Restored Pony Express stop" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/weblog/pony-express/IMG_2329_hu_92daaececf29ccaf.jpg"
width="480" height="368" loading="lazy" decoding="async" alt="Just a view" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;We contrasted that experience with one later when we came upon some horses kept behind a gate at the residence of one retired Air Force vet who appeared to have in his collection several rusty children&amp;rsquo;s swingsets, old tractors, trucks, cars, RVs, clutter, odds and ends, bits and pieces, oddments, miscellany, scrap, and waste. Those dopey horses stared at us as though concerned we might set up off one of the many booby traps their owner probably had devised for the unforgivable sin of having come within spitting distance.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m sure I exaggerate. But the residences one finds in Vernon, Utah are nothing if not unique.&lt;/p&gt;
&lt;p&gt;I digress. Let me finish describing the trip. We found an old dog cemetery, the last indication a lonely childless woman known as &amp;ldquo;Aunt Libby&amp;rdquo; lived in the area. That&amp;rsquo;s how the plaque described her, anyway. Nearby we decided to make camp so we built a fire, cooked dinner, and began to enjoy the beauty of the dark clouds framing the incredible wilderness of Juab county. The dark clouds kept getting darker. &amp;ldquo;Hmm,&amp;rdquo; we thought. It began to rain and thunder. We packed up our things and drove the rest of the way home, stopping only briefly to release our own water in the torrent of nature&amp;rsquo;s.&lt;/p&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;This probably makes sense in the travelog, but it was just a two day trip and I&amp;rsquo;d like to keep the travelog focused on more global adventures.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content:encoded></item><item><title>2020</title><link>https://jva.lol/haikulog/2020/</link><pubDate>Thu, 06 May 2021 19:47:37 -0600</pubDate><guid>https://jva.lol/haikulog/2020/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;Twenty twenty sucked&lt;/p&gt;
&lt;p&gt;Twenty twenty one so far,&lt;/p&gt;
&lt;p&gt;does not suck as bad&lt;/p&gt;
&lt;p&gt;&lt;video autoplay loop muted playsinline preload="metadata" src="https://jva.lol/haikulog/2020/giphy.mp4" aria-label="2020"&gt;&lt;/video&gt;&lt;/p&gt;</content:encoded></item><item><title>Chess and Incompleteness</title><link>https://jva.lol/weblog/chess_and_incompleteness/</link><pubDate>Fri, 05 Feb 2021 16:55:05 -0700</pubDate><guid>https://jva.lol/weblog/chess_and_incompleteness/</guid><description>In which I pretend to understand Kurt Gödel</description><content:encoded>&lt;h1 id="chess-and-logic"&gt;
Chess and Logic
&lt;a class="anchor" href="#chess-and-logic"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Chess and Logic, huh?&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s something fundamental linking them, and I&amp;rsquo;m not talking about using logic to beat a game of chess. The rules of chess are similar to the axioms of a logical system. This got me thinking, can we demonstrate Kurt Gödel&amp;rsquo;s incompleteness theorem in chess?&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re not familiar (and it&amp;rsquo;s a large and difficult territory should you decide to venture there), the incompleteness theorem says that &amp;ldquo;logic systems can describe true statements that can not be derived using that system&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;I decided I wanted to try, so let&amp;rsquo;s get to it!&lt;/p&gt;
&lt;h2 id="on-completeness-and-consistency"&gt;
On Completeness and Consistency
&lt;a class="anchor" href="#on-completeness-and-consistency"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Completeness and consistency are at the heart of the incompleteness theorem, which concludes there can not be an axiomatic system of logic that is both complete (the system can derive every statement that is true) and consistent (the system can derive false statements).&lt;/p&gt;
&lt;p&gt;Or rather, by fixing consistent in place we&amp;rsquo;d say &amp;ldquo;Any consistent formal logic is incomplete&amp;rdquo;. Meaning, broadly, if you have a set of logical rules there will be statements of that logic that are true but that you can&amp;rsquo;t get to using only those rules.&lt;/p&gt;
&lt;p&gt;We fix consistent because consistency is a necessity in logic, completeness is just a nice to have. If I offer you a system in which I can prove 1 + 1 = 2, you might be with me so far. But if I follow up with a proof that 1 + 1 also equals 3, it&amp;rsquo;s over before we even start looking into completeness.&lt;/p&gt;
&lt;h2 id="chess"&gt;
Chess
&lt;a class="anchor" href="#chess"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I think Chess is like a system of logic, so let&amp;rsquo;s play with it a little. There are rules. We can exhaustively enumerate those rules (but we won&amp;rsquo;t, we&amp;rsquo;ll just give some examples).&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s focus on pawns.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pawns can move ahead by one or two squares on their first move.&lt;/li&gt;
&lt;li&gt;On any move after their first, and except when attacking, pawns can only move ahead by one square.&lt;/li&gt;
&lt;li&gt;Attacking (consuming) an enemy piece is only allowed through moving diagonally forward by one square.&lt;/li&gt;
&lt;li&gt;An attack is allowed if the opposing pawn has just exercised its right in its first move to move two squares instead of one and your pawn would otherwise normally be able to attack if the opposing pawn had only moved ahead one square instead of two. (This is the only example of an attack in chess where an opposing piece can be consumed by moving to a square it does not occupy. It is a rule that surprises new chess players and leads to accusations of cheating, but it is a real rule and it is called En Passant- French for &amp;ldquo;in passing&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;Finally, if a pawn reaches the opposite side of the board it can be turned into any piece (usually a queen) except the king.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now you can see why I am not going to attempt to list all the rules of all the pieces, it would be very time consuming. And we can all agree there are in fact rules of chess laid out elsewhere. The point isn&amp;rsquo;t what those rules are, it&amp;rsquo;s what we can do with them.&lt;/p&gt;
&lt;p&gt;Experienced chess players will likely agree a game of chess can be a fascinating expression of decisions. Indeed, observing some of the games of the grandmasters like Magnus Carlsen can put your jaw on the floor. They&amp;rsquo;re like works of art, beautiful landscapes or orchestral symphonies in their own way.&lt;/p&gt;
&lt;p&gt;These rules are analogous to the rules of oh, let&amp;rsquo;s take algebra. There&amp;rsquo;s addition, subtraction, multiplication, and division. There are rules about associativity, commutativity, etc.&lt;/p&gt;
&lt;p&gt;So if we can agree that the rules of chess are analogous to an axiomatic logical system what can we do with that? Can we demonstrate the incompleteness theorem in chess?&lt;/p&gt;
&lt;p&gt;I think we can. I think it might not even be that hard. We can at least try. All we have to do is wrap our heads around completeness and consistency in the rules of chess. But before we do that, let&amp;rsquo;s discuss the chess analogue of true and false statements in logic.&lt;/p&gt;
&lt;h2 id="valid-chessboard-configurations"&gt;
Valid Chessboard Configurations
&lt;a class="anchor" href="#valid-chessboard-configurations"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;What is a valid board configuration? One that doesn&amp;rsquo;t violate any of the rules? Given a random chess board with pieces in various positions it can be hard to tell if that state was achieved by starting with neat rows of pieces in their legal starting position and by following the rules, or if they were just chaotically and randomly placed there. Furthermore, there&amp;rsquo;s not a good way to say a given board is in violation of any of the rules if the rules primarily concern themselves with &lt;em&gt;transitions&lt;/em&gt; between board states. That is, the rules are mostly about moves. But luckily for us, there are rules we can use to immediately detect an invalid board configuration, such as that each player should not have more than one king. A pawn can not become a king by reaching the end of the board. So you could easily tell a board had been arrived at illegally if there were more than two kings on it.&lt;/p&gt;
&lt;h2 id="completeness-in-chess"&gt;
Completeness in Chess
&lt;a class="anchor" href="#completeness-in-chess"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Completeness in a logic system means that every truthful expression can be derived using the logical system. What does completeness in chess mean? Logic concerns itself with truth, chess concerns itself with winning chess. That is to say achieving checkmate. Could completeness in chess mean that every checkmate can be derived using the rules of chess? That sounds vaguely promising. We can probably be more general, though. Let&amp;rsquo;s try &lt;em&gt;completeness in chess means every valid board configuration can be derived using the rules.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="consistency-in-chess"&gt;
Consistency in Chess
&lt;a class="anchor" href="#consistency-in-chess"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Consistency in a logic system means that no false expressions can be derived using the logical system. What does consistency in chess mean? I&amp;rsquo;d say it means something like &amp;ldquo;you can&amp;rsquo;t get to an invalid board state by playing by the rules&amp;rdquo;. That sounds promising. &lt;em&gt;Chess is a consistent system if by following the rules you don&amp;rsquo;t end up with a board configuration that is illegal.&lt;/em&gt; It is consistent if by following the rules you never end up with more than 2 kings on the board.&lt;/p&gt;
&lt;p&gt;Similar to how we can derive the fundamental theorem of algebra, we can play a game of chess and end in a valid configuration of the board (and also checkmate).&lt;/p&gt;
&lt;p&gt;We can also play a game of chess and walk away from it having followed all the rules but before anyone achieves checkmate. We don&amp;rsquo;t even have to call it a draw, we can just mutually agree to walk away and pretend it never happened. The configuration of the board at that point is still legally derived, even if somewhat uninteresting compared to a game that concluded in a checkmate.&lt;/p&gt;
&lt;p&gt;This is similar to a mathematical proof which stops before reaching an interesting statement. You have followed all the rules to an unsatisfying end. You let us all down. You should be ashamed. Why have you done this?&lt;/p&gt;
&lt;h2 id="is-chess-complete"&gt;
Is Chess Complete?
&lt;a class="anchor" href="#is-chess-complete"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;A critical element of the incompleteness theorem is self reference, or Hofstadter&amp;rsquo;s &lt;em&gt;strange loops&lt;/em&gt;. Kurt Gödel derived a statement in a logic system that said of itself &amp;ldquo;I am not derivable&amp;rdquo;. But it was just derived! If the statement was true, then there is a true statement that cannot be derived (ignoring the fact we clearly just derived it) by the system therefore the system cannot be complete. If the statement was false, then there is a false statement derived by the system, therefore the system could not be consistent.&lt;/p&gt;
&lt;p&gt;Kurt Gödel &lt;em&gt;proved&lt;/em&gt; in a formal logical system something &lt;em&gt;about&lt;/em&gt; formal logical systems &lt;em&gt;involving proofs&lt;/em&gt;. This is meta, and indeed his proof was meta too. He used a formal logical system to make a statement &lt;em&gt;about&lt;/em&gt; the formal logical system which was &lt;em&gt;inconsistent with itself&lt;/em&gt; while being a &lt;em&gt;totally valid&lt;/em&gt; expression of the system.&lt;/p&gt;
&lt;p&gt;This would be like arriving at a checkmate in chess after only following the rules in which a paradoxical statement about chess was expressed. That is to say, where each of the pieces had a word printed on them and when played a certain way, the outcome is simultaneously a valid checkmate but also the words on the pieces spell out &amp;ldquo;I am a board configuration that can not be arrived at by following the rules of chess&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="paradox-time"&gt;
Paradox time
&lt;a class="anchor" href="#paradox-time"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;If that sentence is true, then the game we just legally played was actually arrived at illegally (even if we&amp;rsquo;re doubly sure we followed the rules). This game of chess says that there are valid board configurations in chess that can not be arrived at legally, and therefore chess is incomplete.&lt;/p&gt;
&lt;p&gt;If that sentence is false, then we just played a legal game that resulted in a statement about chess that is not true and therefore chess is inconsistent.&lt;/p&gt;
&lt;p&gt;Chess can therefore not be complete if it is consistent, and it can not be consistent if it is complete.&lt;/p&gt;
&lt;p&gt;In order to verify this, are there valid configurations of chess boards that can not be achieved by following the rules? Certainly. Put all 32 normal starting pieces in the lower half of the board, alternating in color. There is no way to get into that state following the rules, but nothing about that state is in violation of any rules and is therefore valid.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;
Conclusion
&lt;a class="anchor" href="#conclusion"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The incompleteness theorem is a brilliant and agile attack on formal logical systems and it brought numerous prominent mathematicians of the period to their knees, in particular Bertrand Russell and his efforts in producing the Principia Mathematica which is probably for the best since it takes hundreds of pages of dense symbols to arrive at the conclusion that 1 + 1 = 2.&lt;/p&gt;
&lt;p&gt;Chess is not unlike a formalized logic. It has rules, and those rules can be used to carry the weight of ideas. Including ideas &lt;em&gt;about&lt;/em&gt; those rules.&lt;/p&gt;
&lt;p&gt;This post was in part inspired by &lt;a href="https://stopa.io/post/269"&gt;this post&lt;/a&gt; which goes much deeper, provides more history and more details while taking the angle of actually implementing Gödel&amp;rsquo;s arithmetic in Lisp.&lt;/p&gt;</content:encoded></item><item><title>Movie</title><link>https://jva.lol/haikulog/movie/</link><pubDate>Tue, 12 May 2020 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/movie/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;Watching a movie&lt;/p&gt;
&lt;p&gt;Without popcorn is not good&lt;/p&gt;
&lt;p&gt;It is very bad&lt;/p&gt;
&lt;p&gt;&lt;img src="3o7rc0qU6m5hneMsuc.gif" alt="Movie" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Chris Bacon</title><link>https://jva.lol/haikulog/chris-bacon/</link><pubDate>Wed, 15 Apr 2020 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/chris-bacon/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;We can talk about&lt;/p&gt;
&lt;p&gt;The haikus Chris bacon sir&lt;/p&gt;
&lt;p&gt;Any time you wish&lt;/p&gt;
&lt;p&gt;&lt;img src="RyFJnOMPBr13G.gif" alt="Chris Bacon" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Singing</title><link>https://jva.lol/haikulog/singing/</link><pubDate>Mon, 30 Mar 2020 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/singing/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;Someone is singing&lt;/p&gt;
&lt;p&gt;In the middle of the night&lt;/p&gt;
&lt;p&gt;Outside my window&lt;/p&gt;
&lt;p&gt;&lt;img src="143qWPF33HtSTK.gif" alt="&amp;ndash;Singing&amp;ndash;" /&gt;&lt;/p&gt;</content:encoded></item><item><title>How I (used to) post to this blog using iOS Shortcuts and Pythonista</title><link>https://jva.lol/weblog/how-i-post-to-this-blog-using-ios-shortcuts-and-pythonista/</link><pubDate>Thu, 26 Mar 2020 00:00:00 +0000</pubDate><guid>https://jva.lol/weblog/how-i-post-to-this-blog-using-ios-shortcuts-and-pythonista/</guid><description>In which I describe the formerly automatized process of posting to my blog</description><content:encoded>&lt;p&gt;EDIT: This blog is now hosted using Hugo, not Jekyll. I have to find a way to migrate what I&amp;rsquo;ve described here.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve had this blog for many years, and basically never posted anything. I wanted to become better about that, so I&amp;rsquo;ve been writing more haikus and trying to write up some of my home projects. My blog uses &lt;a href="https://jekyllrb.com"&gt;Jekyll&lt;/a&gt; and is hosted on &lt;a href="https://pages.github.com"&gt;Github Pages&lt;/a&gt; which already makes it pretty easy to write content but I wanted to see if I could make it even easier. I started with a &amp;ldquo;create new haiku&amp;rdquo; shortcut. This way anytime I have an idea for a haiku it doesn&amp;rsquo;t matter where I am, as long as I have an internet connection on my phone I can post a new one easily.&lt;/p&gt;
&lt;p&gt;So, I began playing with iOS Shortcuts. I wanted a button on my phone that would let me write and post to my blog without needing anything else. The solution I came up with uses a bit of Python in &lt;a href="https://omz-software.com/pythonista/"&gt;Pythonista&lt;/a&gt; for some formatting, as well as &lt;a href="https://workingcopyapp.com"&gt;Working Copy&lt;/a&gt; for the git actions.&lt;/p&gt;
&lt;p&gt;Unfortunately, the only way to share an iOS shortcut is to share it directly. I wanted to export and paste a JSON payload here or something so others could edit and import easily, but it looks like the only way is to share a public link to it. So, here&amp;rsquo;s my &lt;a href="https://www.icloud.com/shortcuts/7d86a57504eb47098bc7d1290e3239d6"&gt;shortcut&lt;/a&gt; for writing and posting a haiku. With a little editing it should be easy enough to change if you wanted to rework it to post to your own blog. It assumes you have the Working Copy app I linked above, as well as a Pythonista script.&lt;/p&gt;
&lt;p&gt;Here are the actions it performs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pull the latest changes from your blog repo&lt;/li&gt;
&lt;li&gt;Ask for the name of the Haiku&lt;/li&gt;
&lt;li&gt;Executes a search in &lt;a href="https://giphy.com"&gt;Giphy&lt;/a&gt; for the given title and lets you choose your favorite gif&lt;/li&gt;
&lt;li&gt;Stages the chosen gif in &lt;code&gt;/assets&lt;/code&gt; in your repo&lt;/li&gt;
&lt;li&gt;Asks for the content of the Haiku. Adding an empty line between each line of content renders the content on new lines. I haven&amp;rsquo;t figured this part out yet, but if you don&amp;rsquo;t do this the whole haiku ends up on one line.&lt;/li&gt;
&lt;li&gt;It then sends the input to the Pythonista script to format it as Jekyll front matter&lt;/li&gt;
&lt;li&gt;It takes the resulting formatted content and stages it as a new file in your repo&lt;/li&gt;
&lt;li&gt;It commits the changes to your repo and pushes to remote&lt;/li&gt;
&lt;li&gt;It then texts my girlfriend to let her know there&amp;rsquo;s a new haiku (I haven&amp;rsquo;t tested this with other people, but I expect that unless you have her number it won&amp;rsquo;t work for you)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So now the only piece missing is the Pythonista script. Here it is:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;from webbrowser import open
from datetime import date
from urllib.parse import quote, unquote
import sys
import x_callback_url
title=sys.argv[1]
body=sys.argv[2]
gif=quote(sys.argv[3])
haiku=&amp;#39;&amp;#39;&amp;#39;---
layout: haiku
category: Haikus
title: &amp;#39;&amp;#39;&amp;#39; + title + &amp;#39;&amp;#39;&amp;#39;
---
&amp;#39;&amp;#39;&amp;#39; + body + &amp;#39;&amp;#39;&amp;#39;
![--&amp;#39;&amp;#39;&amp;#39; + title + &amp;#39;&amp;#39;&amp;#39;--](\{\{ site.url \}\}/assets/&amp;#39;&amp;#39;&amp;#39; + gif + &amp;#39;&amp;#39;&amp;#39;.gif)&amp;#39;&amp;#39;&amp;#39;
x_success = sys.argv[-1] # shortcuts-production://x-callback-url/ic-success/&amp;lt;UUID&amp;gt;
x_cancel = x_success.replace(&amp;#39;ic-success&amp;#39;, &amp;#39;ic-cancel&amp;#39;)
x_error = x_success.replace(&amp;#39;ic-success&amp;#39;, &amp;#39;ic-error&amp;#39;)
x_success += &amp;#39;?x-source=Pythonista3&amp;#39;
x_success += &amp;#39;&amp;amp;result=&amp;#39; + quote(haiku)
x_success += &amp;#39;&amp;amp;datetime=&amp;#39; + quote(str(date.today().strftime(&amp;#39;%Y-%m-%d&amp;#39;)))
open(x_success)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I&amp;rsquo;ve been having fun with this, I&amp;rsquo;ve also made a version that will make a full blog post like this one but haven&amp;rsquo;t used it much since writing long form on an iOS device is not that convenient for me. Anyway, if you&amp;rsquo;re reading this feel free to play with my shortcut and python script! I&amp;rsquo;d love to hear about any projects you use them for!&lt;/p&gt;</content:encoded></item><item><title>Earthquakes</title><link>https://jva.lol/haikulog/earthquakes/</link><pubDate>Thu, 26 Mar 2020 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/earthquakes/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;The earth shakes at times&lt;/p&gt;
&lt;p&gt;It is most unwelcome here&lt;/p&gt;
&lt;p&gt;Among us earthlings&lt;/p&gt;
&lt;p&gt;&lt;img src="exrSCIegLFnPy.gif" alt="Earthquakes" /&gt;&lt;/p&gt;</content:encoded></item><item><title>GPG &amp; YubiKey &amp; You</title><link>https://jva.lol/weblog/gpg-yubikey-you/</link><pubDate>Sat, 14 Mar 2020 00:00:00 +0000</pubDate><guid>https://jva.lol/weblog/gpg-yubikey-you/</guid><description>In which I attempt to do interesting things with my YubiKey</description><content:encoded>&lt;p&gt;I&amp;rsquo;ve recently taken on the task of setting up my YubiKeys for usage beyond 2 factor auth. Something I learned was that OpenPGP smartcards (which include YubiKeys) have slots for three separate keys: Signature, Encryption, and Authentication.&lt;/p&gt;
&lt;p&gt;My first goal is to sign git commits with it. Because I am a man of negligible importance, this is in fact NOT an exercise in security. I&amp;rsquo;m taking more of a hobbyist approach. If security was of a more significant concern in my life, I would probably generate my keys in a live booted and air gapped &lt;a href="https://tails.boum.org"&gt;Tails&lt;/a&gt; environment.&lt;/p&gt;
&lt;p&gt;When I started going down this route I had only in the first place acquired my YubiKey to simplify 2 factor authorization, a flow that I have found myself increasingly spending time due to work and the fact I turn it on everywhere that supports it. I think I was vaguely aware they could be used for more. Regardless, I started by playing around with signing. One of the first things I became aware of was that these things have PIN codes. Never needed them for 2FA, but for managing GPG keys you do. The default user PIN (which is used for signing, among other things) is &lt;code&gt;123456&lt;/code&gt; and the default admin PIN (used for modifying certain card attributes) is &lt;code&gt;12345678&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re following along, I&amp;rsquo;m assuming you have a YubiKey and a recent version of GnuPG.&lt;/p&gt;
&lt;h2 id="configure-your-yubikey"&gt;
Configure your YubiKey
&lt;a class="anchor" href="#configure-your-yubikey"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;To change the PIN (and configure things like your name, language, etc) run &lt;code&gt;gpg --card-edit&lt;/code&gt; with your key plugged in. You should see information about your key. Type &lt;code&gt;admin&lt;/code&gt; and &lt;code&gt;help&lt;/code&gt; to enable and list the available commands. Use &lt;code&gt;passwd&lt;/code&gt; to change the user PIN code.&lt;/p&gt;
&lt;h2 id="a-little-about-gpg-keys"&gt;
A little about GPG keys
&lt;a class="anchor" href="#a-little-about-gpg-keys"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;GPG keys have capabilities: Sign, Certify, and Encrypt. When you generate a GPG public / private keypair, by default you get a primary pub/priv key and a sub pub/priv key. The primary key can Sign and Certify. The subkey can Encrypt. The reason for this default is that Certify is all powerful. It really is your identity. Delegating powers to other keys signed by it is a good way to reduce your security footprint. If someone steals your encrypt key, all you have to do is revoke it, create a new one, and Certify it with your unstolen primary key. If someone steals your primary private key, well they&amp;rsquo;ve just stolen the ability to revoke your other keys or make new keys as you. So keep it extra safe.&lt;/p&gt;
&lt;h2 id="create-a-gpg-key"&gt;
Create a GPG key
&lt;a class="anchor" href="#create-a-gpg-key"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s time to generate your GPG key. &lt;code&gt;gpg --expert --full-gen-key&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Select &lt;code&gt;RSA and RSA(default)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Key size: depending on the version of your key
&lt;ul&gt;
&lt;li&gt;YubiKey NEO - 2048&lt;/li&gt;
&lt;li&gt;YubiKey 4 / 5 - 4096&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Do it again for the subkey&lt;/li&gt;
&lt;li&gt;Pick an expiration date&lt;/li&gt;
&lt;li&gt;Enter your name (must be more than 5 characters)&lt;/li&gt;
&lt;li&gt;Enter your email&lt;/li&gt;
&lt;li&gt;Enter an optional comment&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note the ID of the key generated. For fun, let&amp;rsquo;s look at what we&amp;rsquo;ve got so far. Run &lt;code&gt;gpg --edit-key &amp;lt;KEY ID&amp;gt;&lt;/code&gt;. You should see something like&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Secret key is available.
gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u
gpg: next trustdb check due at 2021-03-12
sec rsa4096/98973C978ECA988D
created: 2020-03-14 expires: never usage: SC
trust: ultimate validity: ultimate
ssb rsa4096/015D68EE1E7AC274
created: 2020-03-14 expires: never usage: E
[ultimate] (1). m3ta4a (testing) &amp;lt;email@address.org&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The usage of the first key is marked as &lt;code&gt;SC&lt;/code&gt;. The second is &lt;code&gt;E&lt;/code&gt;. That means the primary key can sign and certify, while the subkey can encrypt.&lt;/p&gt;
&lt;p&gt;If you have an existing key, you could use it to sign this new one to maintain a chain of custody: &lt;code&gt;gpg -u &amp;lt;your_old_keyid&amp;gt; --sign-key &amp;lt;longid&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;While we&amp;rsquo;re here, let&amp;rsquo;s add separate authentication and signing keys to prepare to fill the slots on the YubiKey.&lt;/p&gt;
&lt;h3 id="authentication-key"&gt;
Authentication Key
&lt;a class="anchor" href="#authentication-key"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;If you&amp;rsquo;re still at the gpg prompt &lt;code&gt;gpg&amp;gt;&lt;/code&gt; from the last command, exit out with Ctrl-C or &lt;code&gt;quit&lt;/code&gt; and enter &lt;code&gt;gpg --expert --edit-key &amp;lt;KEY ID&amp;gt;&lt;/code&gt;. Notice the extra flag for expert. Now enter the command &lt;code&gt;addkey&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pick RSA.&lt;/li&gt;
&lt;li&gt;Toggle capabilities until only authentication is enabled. You should need to enter each option once: &lt;code&gt;S, E, A&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Enter &lt;code&gt;Q&lt;/code&gt; to finish&lt;/li&gt;
&lt;li&gt;Pick the key size&lt;/li&gt;
&lt;li&gt;Pick the expiration (good idea to keep it the same as your master key)&lt;/li&gt;
&lt;li&gt;Follow the rest of the prompts&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="signing-key"&gt;
Signing Key
&lt;a class="anchor" href="#signing-key"&gt;#&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;The steps are the same as for the authentication key, only you should only have to deselect Encrypt when picking the key capabilities since by default Signing and Encryption are selected.
If you &lt;code&gt;quit&lt;/code&gt; out of here now, make sure to save or you&amp;rsquo;ll lose the keys you just made.&lt;/p&gt;
&lt;h2 id="backup-your-keys"&gt;
Backup your keys
&lt;a class="anchor" href="#backup-your-keys"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s a good idea to keep a backup somewhere safe.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;gpg --armor --output privkey.sec --export-secret-key &amp;lt;longid&amp;gt;
gpg --armor --output subkeys.sec --export-secret-subkeys &amp;lt;longid&amp;gt;
gpg --armor --output pubkey.asc --export &amp;lt;longid&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="import-key-to-yubikey"&gt;
Import key to YubiKey
&lt;a class="anchor" href="#import-key-to-yubikey"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Make sure the YubiKey is plugged into your computer. Edit the key again, if you aren&amp;rsquo;t already &lt;code&gt;gpg --edit-key &amp;lt;KEY ID&amp;gt;&lt;/code&gt;. Enter the command &lt;code&gt;toggle&lt;/code&gt; followed by &lt;code&gt;keytocard&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enter &lt;code&gt;y&lt;/code&gt; to move the primary key&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;1&lt;/code&gt;. This moves the signature subkey to the signature slot of the YubiKey.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Enter &lt;code&gt;key 1&lt;/code&gt; (which now should select the encryption key) followed by &lt;code&gt;keytocard&lt;/code&gt;. Select &lt;code&gt;2&lt;/code&gt;. This moves the encryption key to the encryption slot.&lt;/p&gt;
&lt;p&gt;Enter &lt;code&gt;key 1&lt;/code&gt; again and then &lt;code&gt;key 2&lt;/code&gt;. &lt;code&gt;keytocard&lt;/code&gt; and &lt;code&gt;3&lt;/code&gt;. This does the same but for the authentication key.&lt;/p&gt;
&lt;p&gt;Now &lt;code&gt;quit&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt; for save.&lt;/p&gt;
&lt;p&gt;Now your secret keys are on your YubiKey and can be used for their intended purpose when it&amp;rsquo;s connected.&lt;/p&gt;
&lt;h2 id="configure-git-for-commit-signing"&gt;
Configure Git for commit signing
&lt;a class="anchor" href="#configure-git-for-commit-signing"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Configure git for GPG signing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git config --global commit.gpgsign true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git config --global user.signingkey &amp;lt;KEY ID&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And let&amp;rsquo;s restart the GPG agent: &lt;code&gt;gpg-connect-agent reloadagent&lt;/code&gt;. Get out of there with &lt;code&gt;/bye&lt;/code&gt;. Now when you make a commit, git will require the key to be present. If it&amp;rsquo;s not, the commit will fail. If you want to make a signed commit and see what it looks like in the log, the command for that is &lt;code&gt;git log --show-signature&lt;/code&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;gpg: Signature made Sat Mar 14 03:30:27 2020 MDT
gpg: using RSA key 05FFE31C369D8F25CFFF2167FDF8E68C5B840388
gpg: Good signature from &amp;#34;m3ta4a &amp;lt;jakeva@gmail.com&amp;gt;&amp;#34; [ultimate]
Author: m3ta4a 🎩 &amp;lt;jakeva@gmail.com&amp;gt;
Date: Sat Mar 14 03:27:35 2020 -0600
Add YubiKey Post
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="configure-github-for-the-verified-stamp"&gt;
Configure Github for the &amp;lsquo;Verified&amp;rsquo; stamp
&lt;a class="anchor" href="#configure-github-for-the-verified-stamp"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;gpg --armor --export &amp;lt;KEY ID&amp;gt; | pbcopy&lt;/code&gt; and take it to &lt;a href="https://github.com/settings/gpg/new"&gt;add as a new GPG key on Github&lt;/a&gt;. If you forget this stamp, your commits will still show as signed but &amp;lsquo;Unverified&amp;rsquo;.&lt;/p&gt;
&lt;h2 id="etc"&gt;
Etc
&lt;a class="anchor" href="#etc"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Something interesting I noticed is that the gpg-agent caches the key. I removed the key from my computer before making another commit and it still got signed. It looks like this is set in &lt;code&gt;~/.gnupg/gpg-agent.conf&lt;/code&gt; so just a heads up.&lt;/p&gt;</content:encoded></item><item><title>Wasting time</title><link>https://jva.lol/haikulog/wasting-time/</link><pubDate>Thu, 12 Mar 2020 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/wasting-time/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;I like wasting time&lt;/p&gt;
&lt;p&gt;And I like wasting your time&lt;/p&gt;
&lt;p&gt;I did it again&lt;/p&gt;
&lt;p&gt;&lt;video autoplay loop muted playsinline preload="metadata" src="https://jva.lol/haikulog/wasting-time/cKnxiph10lNCP3DCnv.mp4" aria-label="&amp;ndash;Wasting time&amp;ndash;"&gt;&lt;/video&gt;&lt;/p&gt;</content:encoded></item><item><title>Virus</title><link>https://jva.lol/haikulog/virus/</link><pubDate>Thu, 12 Mar 2020 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/virus/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;Is it a virus&lt;/p&gt;
&lt;p&gt;If it doesn’t go viral&lt;/p&gt;
&lt;p&gt;And other questions&lt;/p&gt;
&lt;p&gt;&lt;img src="QtXF6x3sfisPm.gif" alt="&amp;ndash;Virus&amp;ndash;" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Food</title><link>https://jva.lol/haikulog/food/</link><pubDate>Thu, 12 Mar 2020 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/food/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;My girlfriend makes food&lt;/p&gt;
&lt;p&gt;She learned this art in China&lt;/p&gt;
&lt;p&gt;It tastes like Chinese&lt;/p&gt;
&lt;p&gt;&lt;img src="jKaFXbKyZFja0.gif" alt="Food" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Blogs</title><link>https://jva.lol/haikulog/blogs/</link><pubDate>Thu, 12 Mar 2020 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/blogs/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;Blogs have to be good&lt;/p&gt;
&lt;p&gt;If you want people to read&lt;/p&gt;
&lt;p&gt;People don’t read mine&lt;/p&gt;
&lt;p&gt;&lt;img src="kTEqpBl5W9X2w.gif" alt="Blogs" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Haiku</title><link>https://jva.lol/haikulog/haiku/</link><pubDate>Wed, 11 Mar 2020 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/haiku/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;This is a haiku&lt;/p&gt;
&lt;p&gt;It checks all of the boxes&lt;/p&gt;
&lt;p&gt;And now it is done&lt;/p&gt;
&lt;p&gt;&lt;img src="VzfYdUDFIsoot2jLbx.gif" alt="Haiku" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Beer</title><link>https://jva.lol/haikulog/beer/</link><pubDate>Thu, 05 Mar 2020 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/beer/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;Beer is very good&lt;/p&gt;
&lt;p&gt;I drink it often for fun&lt;/p&gt;
&lt;p&gt;Including right now&lt;/p&gt;
&lt;p&gt;&lt;img src="zrj0yPfw3kGTS.gif" alt="Beer" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Richard</title><link>https://jva.lol/haikulog/richard/</link><pubDate>Wed, 04 Mar 2020 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/richard/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;Richard has nice breath&lt;/p&gt;
&lt;p&gt;I wish he could write good code&lt;/p&gt;
&lt;p&gt;But alas he can’t&lt;/p&gt;
&lt;p&gt;&lt;img src="LRerEvcrQZwpYpvcJE.gif" alt="Richard" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Typos from old books</title><link>https://jva.lol/haikulog/typos-from-old-books/</link><pubDate>Tue, 03 Mar 2020 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/typos-from-old-books/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;A piecture is just&lt;/p&gt;
&lt;p&gt;A pie chart of types of pie&lt;/p&gt;
&lt;p&gt;In Antarctica&lt;/p&gt;
&lt;p&gt;&lt;img src="ghCZxkkgKIc6qOLOu8.gif" alt="&amp;ndash;Typos from old books&amp;ndash;" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Ramen</title><link>https://jva.lol/haikulog/ramen/</link><pubDate>Mon, 02 Mar 2020 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/ramen/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;Ramen is so good&lt;/p&gt;
&lt;p&gt;It has noodles, pork, and stuff&lt;/p&gt;
&lt;p&gt;To stuff in my face&lt;/p&gt;
&lt;p&gt;&lt;img src="ZFuPxYpT4qYOWnDAno.gif" alt="Ramen" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Raspberry Pi BTC Node</title><link>https://jva.lol/weblog/raspberry-pi-btc-node/</link><pubDate>Sun, 01 Mar 2020 00:00:00 +0000</pubDate><guid>https://jva.lol/weblog/raspberry-pi-btc-node/</guid><description>In which I attempt nobly to put a raspberry pi to good use</description><content:encoded>&lt;h2 id="time-to-put-one-of-my-spare-raspberry-pis-to-work"&gt;
Time to put one of my spare Raspberry Pis to work
&lt;a class="anchor" href="#time-to-put-one-of-my-spare-raspberry-pis-to-work"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I woke up this morning and thought, &amp;lsquo;Hey why not get a full BTC node running on one of those Pis you got laying around?&amp;rsquo; So that&amp;rsquo;s what I&amp;rsquo;m doing today.&lt;/p&gt;
&lt;h2 id="basics"&gt;
Basics
&lt;a class="anchor" href="#basics"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;This assumes something like &lt;a href="https://www.raspberrypi.com/software/operating-systems/"&gt;Raspbian Lite&lt;/a&gt; (now called Raspberry Pi OS Lite) is already installed and SSH access configured. For Wifi, I use these &lt;a href="https://www.amazon.com/gp/product/B003MTTJOY"&gt;Edimax USB chips&lt;/a&gt;. Configuring them is not too difficult. It boils down a simple config in &lt;code&gt;/etc/network/interfaces/&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;auto lo
iface lo inet loopback
iface eth0 inet dhcp
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ssid &amp;#34;**YOUR_WIFI**&amp;#34;
wpa-psk &amp;#34;**YOUR_PASSWORD**&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I&amp;rsquo;m going to install to the 32 GB SD mini card I used for the OS, which means I&amp;rsquo;m not planning on storing all the blocks. And since flash is less resilient than a HDD, I&amp;rsquo;m going to disable SWAP.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo swapoff --all&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="installing-the-bitcoin-client"&gt;
Installing the Bitcoin client
&lt;a class="anchor" href="#installing-the-bitcoin-client"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Go to &lt;a href="https://github.com/bitcoin/bitcoin/releases"&gt;https://github.com/bitcoin/bitcoin/releases&lt;/a&gt; and make not of the newest stable release. For me it&amp;rsquo;s currently 0.19.0.1. So, with that:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd ~
git clone -b v0.19.0.1 https://github/com/bitcoin/bitcoin.git
cd bitcoin
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I&amp;rsquo;m going to install it without a wallet, since I only want a node.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;./autogen.sh
./configure CXXFLAGS=&amp;#34;--param ggc-min-expand=1 --param ggc-min-heapsize=32768&amp;#34; --enable-cxx --without-gui --disable-shared --with-pic --disable-tests --disable-bench --enable-upnp-default --disable-wallet
make # This will take a long time, best run in tmux or screen, and grab a beer
sudo make install
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="configure"&gt;
Configure
&lt;a class="anchor" href="#configure"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;For this, I want a bitcoin user.
&lt;code&gt;sudo adduser bitcoin&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now switch to the new user
&lt;code&gt;sudo su - bitcoin&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;And create the app data directory
&lt;code&gt;mkdir ~/.bitcoin&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Add the following to &lt;code&gt;~/.bitcoin/bitcoin.conf&lt;/code&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# makes client run in background
daemon=1
# is required by Fail2Ban described below
logips=1
# magic RBP optimisations
maxconnections=40
maxuploadtarget=5000
# Run without SWAP
dbcache=100
maxorphantx=10
maxmempool=50
upnp=1
prune=550 # Only keep the last two days of blocks if like me you are running off a small SD card
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Return to the &lt;code&gt;pi&lt;/code&gt; user
&lt;code&gt;exit&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now create the systemd service to launch the bitcoin client daemon
&lt;code&gt;sudo vim /etc/systemd/system/bitcoind.service&lt;/code&gt;
and give it the following&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[Unit]
Description=Bitcoin daemon
After=network.target
[Service]
ExecStart=/usr/local/bin/bitcoind -conf=/home/bitcoin/.bitcoin/bitcoin.conf -pid=/home/bitcoin/.bitcoin/bitcoind.pid
# Creates /run/bitcoind owned by bitcoin
RuntimeDirectory=bitcoind
User=bitcoin
Type=forking
PIDFile=/home/bitcoin/.bitcoin/bitcoind.pid
Restart=on-failure
# Hardening measures
####################
# Provide a private /tmp and /var/tmp.
PrivateTmp=true
# Mount /usr, /boot/ and /etc read-only for the process.
ProtectSystem=full
# Disallow the process and all of its children to gain
# new privileges through execve().
NoNewPrivileges=true
# Use a new /dev namespace only populated with API pseudo devices
# such as /dev/null, /dev/zero and /dev/random.
PrivateDevices=true
# Deny the creation of writable and executable memory mappings.
MemoryDenyWriteExecute=true
[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Make sure the new service starts on boot
&lt;code&gt;sudo systemctl enable bitcoind&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="security"&gt;
Security
&lt;a class="anchor" href="#security"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Uncomplicated firewall
&lt;code&gt;sudo apt install ufw&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Allow limited ssh
&lt;code&gt;sudo ufw limit ssh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Allow for main net bitcoin traffic
&lt;code&gt;sudo ufw allow 8333 comment &amp;quot;Bitcoin mainnet&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Enable the firewall
&lt;code&gt;sudo ufw enable&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Preview the enforced rules
&lt;code&gt;sudo ufw status verbose&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Install Fail2ban
&lt;code&gt;sudo apt install fail2ban&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;See the active jails - for now it will only be sshd
&lt;code&gt;sudo fail2ban-client status&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Start the bitcoin client
&lt;code&gt;sudo systemctl start bitcoind&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It will take a few minutes to start, but if you want to monitor its progress switch back to the bitcoin user and enter
&lt;code&gt;tail -n 100 -f ~/.bitcoin/debug.log&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You will need to figure out how to forward port 8333 to your new btc node depending on your router.&lt;/p&gt;
&lt;p&gt;Check it&amp;rsquo;s accessible from the outside world with
&lt;code&gt;curl -sL https://bitnodes.earn.com/api/v1/nodes/me-8333/ | jq&lt;/code&gt;&lt;/p&gt;</content:encoded></item><item><title>Building my own NAS</title><link>https://jva.lol/weblog/diy-nas/</link><pubDate>Sun, 23 Feb 2020 00:00:00 +0000</pubDate><guid>https://jva.lol/weblog/diy-nas/</guid><description>In which I Build a Network Attached Storage from scratch</description><content:encoded>&lt;h2 id="first-a-little-background"&gt;
First a little background
&lt;a class="anchor" href="#first-a-little-background"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I had a couple old NAS storage solutions I pulled out of, well, my storage unit a while back. Tried to set them up in my office and found them to be really difficult to use, but the data on them is still good. So I pulled the disks out and decided to look into upgrading to something newer. After some research, I concluded the existing out-of-the-box solutions available are overpriced for what they offer. I decided I wanted more control over the parts to reduce cost, as well as having more freedom in setting up the server software so I looked into building my own.&lt;/p&gt;
&lt;h2 id="parts"&gt;
Parts
&lt;a class="anchor" href="#parts"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I used &lt;a href="https://pcpartpicker.com"&gt;PC Partpicker&lt;/a&gt; to help me narrow down what I was looking for. I went in blind hoping I&amp;rsquo;d find a tower suitable for what I wanted, and I think I found the perfect one. Everything else was selected to fit it.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Part&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://pcpartpicker.com/product/yTdqqs/fractal-design-case-fdcanode804blw"&gt;Fractal Design Node 804 MicroATX Mid Tower Case&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;This is particularly recommended for a NAS build. Both on Amazon and Newegg, reviews were a bit mixed but for a little over $100 I decided I could handle a few imperfections. Right now I have 7 3.5&amp;quot; drives ranging from 1 to 4 TB, and 1 2.5&amp;quot; SSD I want to use as the boot disk. Between disk bay utilization and cooling options, this tower promises some pretty interesting flexibility. In their own words, it has a &amp;ldquo;Unique hard drive mounting system, fitting up to 8 x 3.5&amp;rdquo;, 4 x 2.5&amp;quot; or up to 10 x 3.5&amp;quot;, 2 x 2.5&amp;quot; drives HDD/SSD&amp;quot; all inside a 13.5 x 12 x 15.3in package. That&amp;rsquo;s 12 slots for hard drives! That should fit my needs perfectly with plenty of room for future upgrades and fit nicely under my desk.&lt;/td&gt;
&lt;td&gt;$109.99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://pcpartpicker.com/product/RkJtt6/amd-ryzen-3-2200g-35ghz-quad-core-processor-yd2200c5fbbox"&gt;AMD Ryzen 3 2200G 3.5 GHz Quad-Core Processor&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;At first I was just interested in picking up a 2 core CPU since I intend on doing nothing with this machine except serving up files to my home network. I&amp;rsquo;m the only user, so I don&amp;rsquo;t need much CPU. However, I found it tricky to pair up a 2 core CPU with a motherboard so I just picked a reasonable quad core. It might be a little over kill, but that&amp;rsquo;s ok.&lt;/td&gt;
&lt;td&gt;$107.68&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I had more trouble finding the right motherboard. I ordered a cheap one early on, forgetting to check how many SATA slots it had. What I ordered was the &lt;a href="https://pcpartpicker.com/product/RD97YJ/asrock-b450m-hdv-r40-micro-atx-am4-motherboard-b450m-hdv-r40"&gt;ASRock B450M-HDV R4.0 Micro ATX AM4 Motherboard&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;which comes with 4 SATA 6 Gb/s slots. That won&amp;rsquo;t be enough, but for the price, I can slap some extra slots in with the…&lt;/td&gt;
&lt;td&gt;$69.97&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.amazon.com/dp/B07S8CB398/"&gt;Ziyituod SATA3.0 Card&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6 SATA 6 Gb/s PCIe controller. Problem solved.&lt;/td&gt;
&lt;td&gt;$39.95&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.amazon.com/dp/B019FRDFU0"&gt;Crucial 4GB Single DDR4&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Like I don&amp;rsquo;t need much processing power, I don&amp;rsquo;t need much ram. Two sticks of 4 GB DDR4 should do it.&lt;/td&gt;
&lt;td&gt;$39.98&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.amazon.com/dp/B01KVNCEIG"&gt;be Quiet! Pure Rock Slim - CPU Cooler&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A concern I had was how loud this thing was going to be. I picked a CPU cooler that promises it gets no louder than 25 Db. The fans that come with the tower might be a different story, but I can worry about those later if it&amp;rsquo;s an issue. Anyway, this thing is pretty cheap too.&lt;/td&gt;
&lt;td&gt;$33.28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.newegg.com/evga-supernova-850-g2-220-g2-0850-xr-850w/p/N82E16817438018?Item=N82E16817438018"&gt;EVGA SuperNOVA 800W&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;And the final piece is the power supply. Need enough power for up to ten drives, so here we are.&lt;/td&gt;
&lt;td&gt;$159.99&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;This brings the total to a little over $500. By comparison you can get an &lt;a href="https://www.amazon.com/Synology-Bay-Diskstation-Diskless-DS1819/dp/B07KMKDW42/"&gt;8 bay NAS by Synology&lt;/a&gt; for $931.&lt;/p&gt;
&lt;h2 id="now-i-wait"&gt;
Now I wait
&lt;a class="anchor" href="#now-i-wait"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I haven&amp;rsquo;t got all the parts yet, but I&amp;rsquo;ll post an update when I get it built and have a chance to play with it. I expect there will be some tradeoffs, like the interior will probably be a bit cramped and hard to work with. Maybe it will get a little hot or loud with the four fans. But I&amp;rsquo;m excited, I didn&amp;rsquo;t think I&amp;rsquo;d be able to find a solution that would fit 10 drives in around a square foot of floor space. At less than $500, for me it&amp;rsquo;s a no brainer.&lt;/p&gt;
&lt;h2 id="and-whats-next"&gt;
And what&amp;rsquo;s next?
&lt;a class="anchor" href="#and-whats-next"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Of course, I&amp;rsquo;m already thinking down the road. Right now I only have a little over 12 TBs of hard drives ready to put to use (consisting mostly of Bluray backups and music), but at $485 for a &lt;a href="https://www.amazon.com/Seagate-IronWolf-16TB-Internal-Drive/dp/B07SGGWYC1"&gt;16 TB Drive&lt;/a&gt; I am imagining a world where I spend a small fortune for a +13x increase and while I&amp;rsquo;ll probably never need it, it is pretty fun to imagine.&lt;/p&gt;
&lt;h2 id="small-update"&gt;
Small Update
&lt;a class="anchor" href="#small-update"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Ok so I bought two of the 16 TB drives intending to get a simple mirror up. Funny story, I snapped the plastic on the sata connector of one of them trying to fit it into the case. It is pretty tight in there. Anyway, I bought a third to replace it. But by the time it arrived I decided it was worth trying to salvage the broken one. The pins were still there and I had the broken off plastic piece, so I sort of put it back together delicately and slid it all back in. It worked! The system connected to the drive and now I&amp;rsquo;ve got a healthy 32 TB Raid Z1 pool running in my FreeNAS!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m working now on setting up torrenting over OpenVPN among other things. I&amp;rsquo;ll write some of that up in separate blog posts.&lt;/p&gt;</content:encoded></item><item><title>New York, and Home</title><link>https://jva.lol/travelog/world-trip-2018/new-york-and-home/</link><pubDate>Thu, 15 Nov 2018 00:00:00 +0000</pubDate><guid>https://jva.lol/travelog/world-trip-2018/new-york-and-home/</guid><description> New York # I had about a 6 hour layover in JFK. Didn’t take many pictures. But I ate a lot of seafood and drank a lot of beer.
Home # Back in Salt Lake, I celebrated by singing karaoke and showing people my shoes (for some reason.)</description><content:encoded>&lt;h2 id="new-york"&gt;
New York
&lt;a class="anchor" href="#new-york"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I had about a 6 hour layover in JFK. Didn&amp;rsquo;t take many pictures. But I ate a lot of seafood and drank a lot of beer.&lt;/p&gt;
&lt;h2 id="home"&gt;
Home
&lt;a class="anchor" href="#home"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Back in Salt Lake, I celebrated by singing karaoke and showing people my shoes (for some reason.)&lt;/p&gt;
&lt;div class="book-columns flex flex-wrap"&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/new-york-and-home/1CEA0175-7267-41A6-A79F-5C4B5DCB3CB8_hu_2905296976215574.jpg"
width="480" height="853" loading="lazy" decoding="async" alt="Looking down at brown sneakers and jeans on a worn wooden bar floor, another pair of grey shoes and chair legs at the edges" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/new-york-and-home/IMG_0808_hu_585cec050afe8d84.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/new-york-and-home/IMG_0808_hu_86e6de3ada630186.jpeg 480w, https://jva.lol/travelog/world-trip-2018/new-york-and-home/IMG_0808_hu_585cec050afe8d84.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Several friends&amp;rsquo; sneakered feet gathered in a loose circle on a scuffed wooden floor under dim red bar light" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/new-york-and-home/IMG_0814_hu_9e07b5c90932f066.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/new-york-and-home/IMG_0814_hu_256ea068dbf0e527.jpeg 480w, https://jva.lol/travelog/world-trip-2018/new-york-and-home/IMG_0814_hu_9e07b5c90932f066.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Hand holds up a half-smoked cigar with long grey ash at night, a white SUV and street lights blurred behind" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/new-york-and-home/IMG_0815_hu_6ff06638b9956443.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/new-york-and-home/IMG_0815_hu_9ca77f4b157cb8fd.jpeg 480w, https://jva.lol/travelog/world-trip-2018/new-york-and-home/IMG_0815_hu_6ff06638b9956443.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Cigar with ashed tip held up at night beside a blue parking kiosk, storefront sign and parked cars out of focus across the street" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/new-york-and-home/IMG_0829.JPG"
width="231" height="308" loading="lazy" decoding="async" alt="Two men share a laugh at an outdoor night event, one holding a microphone beside a Coors Light-wrapped column" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Of Particular note is how only a few days after I got home, I met an amazing Chinese woman and we began dating seriously shortly after that. Weird how the world works, isn&amp;rsquo;t it?&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/new-york-and-home/IMG_0821_hu_8461ca1877d50dd8.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/new-york-and-home/IMG_0821_hu_158d846cfd2ecaab.jpeg 480w, https://jva.lol/travelog/world-trip-2018/new-york-and-home/IMG_0821_hu_a089a8410708833d.jpeg 800w, https://jva.lol/travelog/world-trip-2018/new-york-and-home/IMG_0821_hu_8461ca1877d50dd8.jpeg 1200w, https://jva.lol/travelog/world-trip-2018/new-york-and-home/IMG_0821_hu_248e5a574d66c29c.jpeg 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Man and woman in skates pose at the rail of an outdoor ice rink at night, trees wrapped in colorful holiday lights behind them" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Dublin, Ireland</title><link>https://jva.lol/travelog/world-trip-2018/ireland/</link><pubDate>Tue, 13 Nov 2018 00:00:00 +0000</pubDate><guid>https://jva.lol/travelog/world-trip-2018/ireland/</guid><description> Dublin # You best believe I made a stop in the city where I started my 6 week backpacking trip in 2016. Dublin! Another favorite. I wish I could live dozens of lives so I could truly soak in the beauty, history, and culture of every city on this trip. Not least of all, Dublin.
I stayed in an historic hotel that, with its winding halls and unpredictable layout, reminded me of “House of Leaves”. Fortunately, I didn’t get trapped.</description><content:encoded>&lt;h2 id="dublin"&gt;
Dublin
&lt;a class="anchor" href="#dublin"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;You best believe I made a stop in the city where I started my 6 week backpacking trip in 2016. Dublin! Another favorite. I wish I could live dozens of lives so I could truly soak in the beauty, history, and culture of every city on this trip. Not least of all, Dublin.&lt;/p&gt;
&lt;p&gt;I stayed in an historic hotel that, with its winding halls and unpredictable layout, reminded me of &amp;ldquo;House of Leaves&amp;rdquo;. Fortunately, I didn&amp;rsquo;t get trapped.&lt;/p&gt;
&lt;p&gt;Since I missed it in 2016 by about a couple hundred yards (facepalm), I made a more deliberate effort to seek out and visit the Quaternion plaque on Brougham (Broom) Bridge.&lt;/p&gt;
&lt;p&gt;It says&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Here as he walked by on the 16th of October 1843 Sir William Rowan Hamilton in a flash of genius discovered the fundamental formula for quaternion multiplication
i2 = j2 = k2 = ijk = −1
&amp;amp; cut it on a stone of this bridge.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="book-columns flex flex-wrap"&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0763_hu_4c0d4af0e5cbb749.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0763_hu_dc7f24b4fe596159.jpeg 480w, https://jva.lol/travelog/world-trip-2018/ireland/IMG_0763_hu_4c0d4af0e5cbb749.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="A columned stone church with a tall clock spire in Ireland, a yellow-green ambulance parked at its railings" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0765_hu_f8efc6f3001d01b.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0765_hu_9298650462768d94.jpeg 480w, https://jva.lol/travelog/world-trip-2018/ireland/IMG_0765_hu_f8efc6f3001d01b.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Shoppers and schoolgirls in uniform on a Dublin shopping street under a lit &amp;ldquo;Welcome to Dublin One&amp;rdquo; bow sign" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0767_hu_e1427723c774b50a.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0767_hu_57d3a578b9549102.jpeg 480w, https://jva.lol/travelog/world-trip-2018/ireland/IMG_0767_hu_e1427723c774b50a.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="The Parnell Monument obelisk with its bronze statue and gold harp rises over a Dublin street corner under grey skies" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0769_hu_de6ed12d87ed7d13.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0769_hu_8b136a63c82b1604.jpeg 480w, https://jva.lol/travelog/world-trip-2018/ireland/IMG_0769_hu_de6ed12d87ed7d13.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Stone Gothic church in Dublin with a scaffolded clock-tower spire, a white van passing on the street below at dusk" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0776_hu_75c1ef8b14da4d0e.JPG" srcset="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0776_hu_2e0abbb766989994.JPG 480w, https://jva.lol/travelog/world-trip-2018/ireland/IMG_0776_hu_75c1ef8b14da4d0e.JPG 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="800" loading="lazy" decoding="async" alt="Empty Dublin street corner at night, a lit deli storefront and streetlights glowing over wet pavement" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0778_hu_552a6b26166f4757.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0778_hu_85ead9f1e2e135c0.jpeg 480w, https://jva.lol/travelog/world-trip-2018/ireland/IMG_0778_hu_90b1409cd59ec47e.jpeg 800w, https://jva.lol/travelog/world-trip-2018/ireland/IMG_0778_hu_552a6b26166f4757.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Canal lock with a small weir beside a lane in Dublin, brick houses on the far bank and a walker on the path" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0780_hu_4a798c748d0a2eb9.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0780_hu_1ce65780f1b65021.jpeg 480w, https://jva.lol/travelog/world-trip-2018/ireland/IMG_0780_hu_4a798c748d0a2eb9.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Paved canal towpath stretching toward a low sunset, hedges on the left and water with a green fence on the right" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0781_hu_58ce590c53722543.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0781_hu_dfdf398d0644a3d0.jpeg 480w, https://jva.lol/travelog/world-trip-2018/ireland/IMG_0781_hu_58ce590c53722543.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Sunset light reflecting gold on a reedy canal in Ireland, grassy bank in front and dark clouds overhead" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0782_hu_95b049d4da354f46.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0782_hu_b94842c911b1ea5d.jpeg 480w, https://jva.lol/travelog/world-trip-2018/ireland/IMG_0782_hu_908a999a71119f75.jpeg 800w, https://jva.lol/travelog/world-trip-2018/ireland/IMG_0782_hu_95b049d4da354f46.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Stone arch bridge over a Dublin canal beside a modern rail bridge, with a towpath curving underneath on a grey day" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0787_hu_8e75319f75bc5cb9.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0787_hu_c577e83e466dab18.jpeg 480w, https://jva.lol/travelog/world-trip-2018/ireland/IMG_0787_hu_1408d10fe623a32a.jpeg 800w, https://jva.lol/travelog/world-trip-2018/ireland/IMG_0787_hu_8e75319f75bc5cb9.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Graffiti-marked Broom Bridge arching over the Royal Canal in Dublin, a stone plaque set into the wall by the towpath" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0789.JPG"
width="324" height="324" loading="lazy" decoding="async" alt="Stone plaque on Broom Bridge, Dublin, marking where William Rowan Hamilton carved his quaternion formula in 1843" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0790.JPG"
width="324" height="324" loading="lazy" decoding="async" alt="Curly-haired man taking a smiling selfie in front of Broom Bridge and the canal in Dublin" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0794_hu_7a5991870a4bf476.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0794_hu_c71ba20f039c1b71.jpeg 480w, https://jva.lol/travelog/world-trip-2018/ireland/IMG_0794_hu_7a5991870a4bf476.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Long reflecting pool of the Garden of Remembrance in Dublin, benches along both sides and the Irish flag flying beyond" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0796_hu_582ecdfa63bd3b26.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0796_hu_96a9e3227dcbf1de.jpeg 480w, https://jva.lol/travelog/world-trip-2018/ireland/IMG_0796_hu_582ecdfa63bd3b26.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Children of Lir bronze sculpture of falling figures and rising swans above a leaf-strewn pool, Irish tricolor overhead" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0804_hu_50ebc015b1c02869.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/ireland/IMG_0804_hu_7a0e412badcf8924.jpeg 480w, https://jva.lol/travelog/world-trip-2018/ireland/IMG_0804_hu_fcce09983f4977ef.jpeg 800w, https://jva.lol/travelog/world-trip-2018/ireland/IMG_0804_hu_50ebc015b1c02869.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Old-fashioned hotel sitting room with green velvet couches, red armchairs, a marble fireplace, and patterned red carpet" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</content:encoded></item><item><title>Istanbul, Turkey</title><link>https://jva.lol/travelog/world-trip-2018/turkey/</link><pubDate>Sun, 11 Nov 2018 00:00:00 +0000</pubDate><guid>https://jva.lol/travelog/world-trip-2018/turkey/</guid><description> Istanbul # Our last stop before all going our separate ways was in Istanbul. Highlight of that visit for me was the Hagia Sophia, once the tallest structure in the world and certainly one of the oldest still standing. There is a lot of history, including that it wasn’t officially called Istanbul until 1930. But I’ll let you google for the history. I’m just here to brag with photographic evidence that I’ve been there (although in this case it appears I don’t actually make an appearance in my own photos).</description><content:encoded>&lt;h2 id="istanbul"&gt;
Istanbul
&lt;a class="anchor" href="#istanbul"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Our last stop before all going our separate ways was in Istanbul. Highlight of that visit for me was the Hagia Sophia, once the tallest structure in the world and certainly one of the oldest still standing. There is a lot of history, including that it wasn&amp;rsquo;t officially called Istanbul until 1930. But I&amp;rsquo;ll let you google for the history. I&amp;rsquo;m just here to brag with photographic evidence that I&amp;rsquo;ve been there (although in this case it appears I don&amp;rsquo;t actually make an appearance in my own photos).&lt;/p&gt;
&lt;p&gt;One of my other favorite parts of Istanbul was the lounge at the Ataturk airport. Free food and drinks for as long as you need to wait for your flight. Only thing is… &lt;em&gt;it doesn&amp;rsquo;t seem like any one checks your ticket once you&amp;rsquo;re in&lt;/em&gt;. So if you ever need to hide for a long while…&lt;/p&gt;
&lt;div class="book-columns flex flex-wrap"&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0821_hu_3f6ac22500050f3b.JPG" srcset="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0821_hu_b7b34cc7888f4fcc.JPG 480w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0821_hu_a2b8fb6f2e7eb3de.JPG 800w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0821_hu_3f6ac22500050f3b.JPG 1200w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0821_hu_dc4827e73e467549.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Doormen in suits chat outside an ivy-draped yellow Ottoman-style hotel on a cobbled Istanbul street, cafe signs down the block" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0823_hu_648034e420597164.JPG" srcset="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0823_hu_d1359c04142072a3.JPG 480w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0823_hu_d200b1d429e2752d.JPG 800w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0823_hu_648034e420597164.JPG 1200w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0823_hu_a534777c6dfbcc56.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Dome and minarets of Hagia Sophia in Istanbul rise above green trees under a clear blue sky" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0824_hu_77a53e8ce97d947f.JPG" srcset="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0824_hu_f9b32fec56db1f5f.JPG 480w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0824_hu_f8b094390f72cea7.JPG 800w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0824_hu_77a53e8ce97d947f.JPG 1200w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0824_hu_8662bd999f755a39.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Bazaar stalls in Istanbul selling scarves, kaftans, magnets, and dolls under autumn trees, a Turkish flag hanging out front" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0828_hu_fc434bf424821a21.JPG" srcset="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0828_hu_3d23459fd6f9c398.JPG 480w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0828_hu_744697c5aabec38b.JPG 800w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0828_hu_fc434bf424821a21.JPG 1200w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0828_hu_b19bfebb757b0e5a.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Looking up at a slender stone minaret and the pink buttressed walls of Hagia Sophia against blue sky" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0836_hu_8267fe099d1c40ca.JPG" srcset="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0836_hu_92ac5dcac1069857.JPG 480w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0836_hu_863a33bf63f99b26.JPG 800w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0836_hu_8267fe099d1c40ca.JPG 1200w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0836_hu_6c3d322451d2ca75.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Tourists stroll before the Imperial Gate of Topkapi Palace in Istanbul, its marble arch topped with gold Arabic calligraphy" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0857_hu_bb9055a995c0bf35.JPG" srcset="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0857_hu_9e5f3a89eca89121.JPG 480w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0857_hu_324d5e016e9d8927.JPG 800w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0857_hu_bb9055a995c0bf35.JPG 1200w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0857_hu_758e88b5b45fa0f7.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Inside Hagia Sophia, giant round calligraphy medallions hang beneath the faded painted dome and arched gallery windows" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0869_hu_baa2288eacb4d11.JPG" srcset="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0869_hu_ff14656302c183ce.JPG 480w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0869_hu_4cbb6a99e7191aa4.JPG 800w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0869_hu_baa2288eacb4d11.JPG 1200w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0869_hu_b0180c508fa9f989.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Large bronze bell engraved with crosses and leaf garlands sits on a stone floor against a rough brick wall" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0883_hu_2c476d07cadbf6aa.JPG" srcset="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0883_hu_93c70c2112de5599.JPG 480w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0883_hu_77b939e299f5c2b3.JPG 800w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0883_hu_2c476d07cadbf6aa.JPG 1200w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0883_hu_200bee36f2f5036d.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Two pointed minarets and the pink domed bulk of Hagia Sophia in Istanbul against a deep blue sky" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0911_hu_b3042a1649c69984.JPG" srcset="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0911_hu_dc59e2bd2f410bb7.JPG 480w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0911_hu_6a315650eb1618a3.JPG 800w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0911_hu_b3042a1649c69984.JPG 1200w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0911_hu_ef36b2ab3c79f56d.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Ferries cross the choppy blue Bosphorus in Istanbul, hillside neighborhoods and a suspension bridge along the far shore" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0917_hu_85407b7beafc39a7.JPG" srcset="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0917_hu_1f93c18b913ab5ed.JPG 480w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0917_hu_a07108402db6d3ff.JPG 800w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0917_hu_85407b7beafc39a7.JPG 1200w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0917_hu_afef0c3983c5bbef.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Ornate white Dolmabahce Mosque and its twin minarets on the Bosphorus shore, ferries passing and a high-rise tower behind" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0922_hu_a07f6876fb827bab.JPG" srcset="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0922_hu_ab1411d0bd4cc40a.JPG 480w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0922_hu_f9040ecdf64b4eb1.JPG 800w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0922_hu_a07f6876fb827bab.JPG 1200w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0922_hu_79fde66cb0d1c5db.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="White motor yacht speeds past the ornate Ortakoy Mosque on the Bosphorus, the Bosphorus Bridge deck overhead at right" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0934_hu_a1a5477f9e2eb8b7.JPG" srcset="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0934_hu_ab586a594a9d647d.JPG 480w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0934_hu_67180543c7baaccc.JPG 800w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0934_hu_a1a5477f9e2eb8b7.JPG 1200w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0934_hu_6f34273d03483489.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Stone facade of Beylerbeyi Palace looms on the Bosphorus waterfront beneath a suspension bridge under dark clouds" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0936_hu_27d1dc2a65212745.JPG" srcset="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0936_hu_f245cd273d74bf7e.JPG 480w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0936_hu_10b034058b04baea.JPG 800w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0936_hu_27d1dc2a65212745.JPG 1200w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0936_hu_4ca3281598a3b80d.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Arched windows and carved columns of Beylerbeyi Palace stretch along the Bosphorus seawall, a palm tree at one corner" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0952_hu_452d2c80bd0e3010.JPG" srcset="https://jva.lol/travelog/world-trip-2018/turkey/DSC_0952_hu_a9343ebc1d16455a.JPG 480w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0952_hu_80c8d02f99139118.JPG 800w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0952_hu_452d2c80bd0e3010.JPG 1200w, https://jva.lol/travelog/world-trip-2018/turkey/DSC_0952_hu_5dca5973d6746a88.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Istanbul skyline silhouetted from the water, mosque domes and minarets rising over ferries and sun-sparkled waves" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/IMG_0723_hu_e497fec4b9122641.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/turkey/IMG_0723_hu_1e34d536da36469d.jpeg 480w, https://jva.lol/travelog/world-trip-2018/turkey/IMG_0723_hu_7503c825b298e052.jpeg 800w, https://jva.lol/travelog/world-trip-2018/turkey/IMG_0723_hu_e497fec4b9122641.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Looking up into Hagia Sophia&amp;rsquo;s gold central dome ringed with arched windows, mosaic angels and scaffolding below" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/IMG_0724_hu_c68e61966ba7ee75.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/turkey/IMG_0724_hu_1c0d2eab13eed898.jpeg 480w, https://jva.lol/travelog/world-trip-2018/turkey/IMG_0724_hu_14831fd3c140f080.jpeg 800w, https://jva.lol/travelog/world-trip-2018/turkey/IMG_0724_hu_c68e61966ba7ee75.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Visitors wander the marble floor of Hagia Sophia beneath glowing chandeliers, calligraphy medallions, and stained glass" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/IMG_0726_hu_1ebe4e18f4690c08.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/turkey/IMG_0726_hu_48586720e6edecaf.jpeg 480w, https://jva.lol/travelog/world-trip-2018/turkey/IMG_0726_hu_1ebe4e18f4690c08.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Crowds beneath Hagia Sophia&amp;rsquo;s stacked golden domes, with a Madonna and Child mosaic in the apse and tall scaffolding at left" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/IMG_0730_hu_f52fcee080f95b4f.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/turkey/IMG_0730_hu_f88619b4256e18ab.jpeg 480w, https://jva.lol/travelog/world-trip-2018/turkey/IMG_0730_hu_f52fcee080f95b4f.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Hagia Sophia&amp;rsquo;s painted domes and stained-glass windows above the marble mihrab, brass chandeliers hanging in the foreground" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/turkey/IMG_0731_hu_b091b1e820d27bca.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/turkey/IMG_0731_hu_c0dbf76ed90952e4.jpeg 480w, https://jva.lol/travelog/world-trip-2018/turkey/IMG_0731_hu_bee6dccd9f4b94f7.jpeg 800w, https://jva.lol/travelog/world-trip-2018/turkey/IMG_0731_hu_b091b1e820d27bca.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Older man rests in a green leather chair beside luggage in an airport lounge, pool table and round bookshelf wall behind him" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</content:encoded></item><item><title>Kathmandu, Nepal and The Himalayas / Everest</title><link>https://jva.lol/travelog/world-trip-2018/nepal/</link><pubDate>Sun, 04 Nov 2018 00:00:00 +0000</pubDate><guid>https://jva.lol/travelog/world-trip-2018/nepal/</guid><description> Kathmandu #</description><content:encoded>&lt;h2 id="kathmandu"&gt;
Kathmandu
&lt;a class="anchor" href="#kathmandu"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;div class="book-columns flex flex-wrap"&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0764_hu_216aa8b555795e2.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0764_hu_28bb04bd13c03ed3.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0764_hu_e75fe60e7e274d36.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0764_hu_216aa8b555795e2.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0764_hu_6b310bbe97d561a.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Orange and blue bird-of-paradise flower blooming beside a walkway in Nepal, dense green leaves behind" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0765_hu_a4708425a5015084.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0765_hu_6e7508f1ac346d85.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0765_hu_8dbab3645f4474df.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0765_hu_a4708425a5015084.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0765_hu_fe93b4c8098bfe35.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Weathered stone deity statues ringed by pots of yellow marigolds on brick terraces in a Kathmandu garden" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0767_hu_69872acfe03e976a.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0767_hu_f096efc299135ca4.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0767_hu_f5e73f727c7e107c.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0767_hu_69872acfe03e976a.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0767_hu_619842515852266.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Copper basin on a tiled floor filled with orange marigold petals and five floating red gerbera blossoms" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0771_hu_8bc4efe552ec1c91.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0771_hu_bf5cc3d10d9d6a6b.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0771_hu_ed968ea847f98cbd.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0771_hu_8bc4efe552ec1c91.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0771_hu_c61545a57fb1aedf.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Boudhanath Stupa&amp;rsquo;s painted Buddha eyes and prayer flags rise behind a pigeon-covered temple roof in Kathmandu" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0773_hu_90fd57abdd1ffd68.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0773_hu_b75cfcaeb2479ac6.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0773_hu_a463ea904a9db424.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0773_hu_90fd57abdd1ffd68.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0773_hu_c455e5a2ee155ec8.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Sunny square at Boudha in Kathmandu, shoppers strolling past ornate brick guesthouses while pigeons carpet the pavement" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0776_hu_f72711f44a9faf3a.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0776_hu_9f72caeab841754e.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0776_hu_4664183c6da2d6c6.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0776_hu_f72711f44a9faf3a.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0776_hu_229f65c5321933e2.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Storefronts and a monastery building with golden dharma wheel ring the pigeon-filled plaza around Boudhanath in Kathmandu" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0779_hu_f3842c31aaf08101.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0779_hu_6bdd86bc1bc95cbf.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0779_hu_43aff4b05e18c7b6.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0779_hu_f3842c31aaf08101.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0779_hu_20d8b3623976bad0.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Hundreds of pigeons crowding a brick plaza in Kathmandu as a child runs among them, coffee shop and stores behind" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0783_hu_9865cde7769a7334.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0783_hu_f8b8d90aaee2b556.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0783_hu_1bb84fcebcf7e45b.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0783_hu_9865cde7769a7334.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0783_hu_272b32133d9ed313.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Dense flock of pigeons covering the brick square outside clothing shops in Kathmandu, a few shoppers at the edges" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0788_hu_3b98936f4451aca5.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0788_hu_8f022a896a43b81e.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0788_hu_e2c836ec7e78cb4e.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0788_hu_3b98936f4451aca5.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0788_hu_bda57e04dfcbc2ed.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Strings of prayer flags fan out over a white wall lined with prayer wheels at Boudhanath in Kathmandu, visitors walking by" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0793_hu_e96bac546ddae09e.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0793_hu_1b1fc2e1d891d2a3.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0793_hu_22dc1906164a1e34.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0793_hu_e96bac546ddae09e.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0793_hu_5ca306fa711a6be8.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Kathmandu curio shop display of carved tusks, bead strands, an amber slab, and small animal figurines behind glass" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0794_hu_533b0e2d02209a3a.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0794_hu_7b3cc4fd34ff0923.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0794_hu_29090a5d18b9826e.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0794_hu_533b0e2d02209a3a.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0794_hu_faca0b2add4d680c.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Kathmandu shop crammed with stacked brass singing bowls and large hanging gongs in every size" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0797_hu_d9475dbd37b6424.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0797_hu_4b432a56d4f8349f.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0797_hu_7db3928b01431c20.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0797_hu_d9475dbd37b6424.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0797_hu_76a9896d36eecf6b.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Colored-powder rangoli of a goddess in pink robes laid out on the ground in Nepal, oil lamps set along the border" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0800_hu_759c81b42c80b599.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0800_hu_e0bd30ce69d842d7.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0800_hu_1a917223fdd0371a.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0800_hu_759c81b42c80b599.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0800_hu_7bb8147db1d7c6a6.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Bronze temple bells hung in red stone frames on a white shrine wall in Nepal, marigold garlands draped around them" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0804_hu_2bad73f97a56a906.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0804_hu_c0c5055f3eafa93c.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0804_hu_bc4a7845d9602dd1.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0804_hu_2bad73f97a56a906.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0804_hu_4d9098dcbfd478b0.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Looking up at Boudhanath Stupa&amp;rsquo;s gilded spire and painted eyes, prayer flags radiating out and pigeons dotting the dome" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0810_hu_1261bfe945296d6f.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0810_hu_71e5f5c738efaf27.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0810_hu_afaba0de6ef8d823.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0810_hu_1261bfe945296d6f.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0810_hu_f064c3e70e1fdfb8.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Painted statues of riders on white elephants flank the entrance to Boudhanath in Kathmandu as visitors walk between them" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0813_hu_b07d3616866df8f8.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0813_hu_80e947f873483d4c.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0813_hu_84677935e888d5f.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0813_hu_b07d3616866df8f8.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0813_hu_64e7213b754c6d2e.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="People sitting under a huge engraved silver bell hanging from an ornate golden arch near Boudhanath in Kathmandu" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0814_hu_327f187f78cfec34.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0814_hu_530bea957f1669ed.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0814_hu_344c6e786630c042.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0814_hu_327f187f78cfec34.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0814_hu_7552a2625882ffc2.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Pigeons blanket a temple roof and the white terraces of Boudhanath Stupa in Kathmandu, elephant statues guarding the steps" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="himalayas--everest"&gt;
Himalayas / Everest
&lt;a class="anchor" href="#himalayas--everest"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;We didn&amp;rsquo;t make it to the summit, we didn&amp;rsquo;t even try. We chartered a helicopter to near base camp. Including the flight into Lukla airport, considered by many to be the most dangerous in the world.&lt;/p&gt;
&lt;div class="book-columns flex flex-wrap"&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0434_hu_46c34a8069da3399.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0434_hu_16c07d4bcb8e0f77.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0434_hu_dbcd73e7aabf7e09.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0434_hu_46c34a8069da3399.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0434_hu_e2628ddff15903e0.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Snow plume streaming off the summit of Mount Everest against a deep blue sky, jagged ridges below" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0547_hu_ef73b6eae1264c44.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0547_hu_d743e53a7e390714.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0547_hu_73e09628de9a894.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0547_hu_ef73b6eae1264c44.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0547_hu_9675d0ad6f4d6af0.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Stone-walled trekking lodge with a small wind turbine in a frosty Himalayan village in Nepal, hillside looming behind" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0562_hu_e4ad75f94139356a.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0562_hu_f63736d76549fb6f.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0562_hu_45febe8c68e942c0.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0562_hu_e4ad75f94139356a.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0562_hu_bb5f3ada9f8783d2.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Herder driving black yaks across brown scrubland in Nepal, snow-streaked Himalayan peaks towering behind" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0567_hu_9f275569322f1910.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0567_hu_56e9b85e113667c5.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0567_hu_14a91fa213d11fce.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0567_hu_9f275569322f1910.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0567_hu_e0d990aaee732af3.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Two bundled-up trekkers on rocky ground in Nepal, one photographing a glacier spilling down the mountainside" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0600_hu_3bbb676e03a080d2.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0600_hu_c96d0bca4332a602.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0600_hu_54768e228e83eb2a.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0600_hu_3bbb676e03a080d2.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0600_hu_baa051f2f405a342.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Glossy black crow mid-stride on a sunlit stone ledge in Nepal, stone wall and wooden railing blurred behind" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0637_hu_4d7222c2efff28c4.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0637_hu_55ec8661938c9c4.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0637_hu_b196d0f3155869c.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0637_hu_4d7222c2efff28c4.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0637_hu_afce1559a8cab105.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Snow-capped pyramid of Ama Dablam rising above brown ridgelines under a clear blue Himalayan sky" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0643_hu_fecc6fba7558ecdd.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0643_hu_da467ae434374baa.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0643_hu_4939d593dd252ccf.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0643_hu_fecc6fba7558ecdd.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0643_hu_cdea0917e7e81550.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Two black pack yaks with saddles and blankets grazing on a dry, sunlit hillside in Nepal" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0753_hu_120ae56016f8b65c.JPG" srcset="https://jva.lol/travelog/world-trip-2018/nepal/DSC_0753_hu_2dd87a97059ed1d4.JPG 480w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0753_hu_55745f6a68e7fc72.JPG 800w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0753_hu_120ae56016f8b65c.JPG 1200w, https://jva.lol/travelog/world-trip-2018/nepal/DSC_0753_hu_54279f238b4654f8.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Group of trekkers gathered beside a white and blue helicopter on a concrete pad in Nepal, doors open before boarding" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0613_hu_11cbda0695262d0c.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0613_hu_e58b55604bd3f483.jpeg 480w, https://jva.lol/travelog/world-trip-2018/nepal/IMG_0613_hu_5e6bd5f216e6870b.jpeg 800w, https://jva.lol/travelog/world-trip-2018/nepal/IMG_0613_hu_11cbda0695262d0c.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Workers in safety vests loading a helicopter on a gravel pad at Lukla, Nepal, steep forested mountains all around" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0615_hu_838ffa88e5012968.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0615_hu_21715be2f7fd18da.jpeg 480w, https://jva.lol/travelog/world-trip-2018/nepal/IMG_0615_hu_86d7ef55c64be385.jpeg 800w, https://jva.lol/travelog/world-trip-2018/nepal/IMG_0615_hu_838ffa88e5012968.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Dawn rays fanning over a dark Himalayan ridge above stone lodges and stacked supplies in Lukla, Nepal" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0624_hu_38c8675863a27248.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0624_hu_8c3514a078728cc8.jpeg 480w, https://jva.lol/travelog/world-trip-2018/nepal/IMG_0624_hu_cb3b2037a2c6240e.jpeg 800w, https://jva.lol/travelog/world-trip-2018/nepal/IMG_0624_hu_38c8675863a27248.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Crews in orange vests staging cargo beside a red helicopter at dawn in Lukla, Nepal, mountains looming in half-light" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0638_hu_242881abc5d9593e.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0638_hu_977d0d6a058e0279.jpeg 480w, https://jva.lol/travelog/world-trip-2018/nepal/IMG_0638_hu_4c7b43c30c8f1d55.jpeg 800w, https://jva.lol/travelog/world-trip-2018/nepal/IMG_0638_hu_242881abc5d9593e.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Helicopter resting on a stone landing circle in a high Himalayan valley in Nepal, rugged snow-patched peaks behind" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0647_hu_7364b0ae25af80ec.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0647_hu_d47d1c2a8cf8141d.jpeg 480w, https://jva.lol/travelog/world-trip-2018/nepal/IMG_0647_hu_a56ed1d437b1ff19.jpeg 800w, https://jva.lol/travelog/world-trip-2018/nepal/IMG_0647_hu_7364b0ae25af80ec.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Wide scrub-covered valley in Nepal&amp;rsquo;s Khumbu with a small yak train in the distance beneath snow-capped peaks" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0662_hu_ac2fba8a93f960c8.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0662_hu_e515a4cc8df16cd8.jpeg 480w, https://jva.lol/travelog/world-trip-2018/nepal/IMG_0662_hu_ac2fba8a93f960c8.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Smiling man in a ball cap and puffy jacket with Everest, Lhotse, and Ama Dablam rising behind him in Nepal" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0687_hu_9ae3d48a049e5543.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0687_hu_f793394502ed1011.jpeg 480w, https://jva.lol/travelog/world-trip-2018/nepal/IMG_0687_hu_9ae3d48a049e5543.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Man in a black down jacket standing at a stone wall in Nepal, pine trees and snowy Himalayan peaks behind him" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0698_hu_ff67a7a5f72fecf2.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0698_hu_a4959c4bc73e4dfa.jpeg 480w, https://jva.lol/travelog/world-trip-2018/nepal/IMG_0698_hu_ff67a7a5f72fecf2.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Steep Himalayan valley in Nepal with forested ridges receding into haze, dry golden brush on the slope in the foreground" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0705.JPG"
width="288" height="384" loading="lazy" decoding="async" alt="Two men in winter jackets and hats stand on a barren Himalayan slope under deep blue sky, a snowy peak rising behind them" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0706_hu_51db4fe99f4aca2.JPG"
width="480" height="640" loading="lazy" decoding="async" alt="Two men in down jackets pose on rocky high-altitude ground in Nepal, a helicopter parked behind them below snowy peaks" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0711_hu_d8627cd3abb2699b.JPG"
width="480" height="640" loading="lazy" decoding="async" alt="Two smiling men in hats and puffy jackets stand arm in arm before massive snow-covered Himalayan peaks near Everest" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/nepal/IMG_0714_hu_841550c8f7566d18.JPG"
width="480" height="480" loading="lazy" decoding="async" alt="Workers in safety vests carry supplies past a helicopter on a gravel helipad in a Nepali mountain village at dusk" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</content:encoded></item><item><title>Chengdu (Sichuan Province)</title><link>https://jva.lol/travelog/world-trip-2018/china/chengdu/</link><pubDate>Sun, 04 Nov 2018 00:00:00 +0000</pubDate><guid>https://jva.lol/travelog/world-trip-2018/china/chengdu/</guid><description> Chengdu # Chengdu felt a little more less overwhelming. Still a much larger city than most people in the United States would be used to, but we stayed in an area of the city that could have been mistaken for Chicago, except with everything written in Chinese. And everyone around is Chinese. And they eat crab eggs and fish heads.
The highlight, aside from encountering “Hot Pot” for the first time was visiting the national Panda zoo!</description><content:encoded>&lt;h2 id="chengdu"&gt;
Chengdu
&lt;a class="anchor" href="#chengdu"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Chengdu felt a little more less overwhelming. Still a much larger city than most people in the United States would be used to, but we stayed in an area of the city that could have been mistaken for Chicago, except with everything written in Chinese. And everyone around is Chinese. And they eat crab eggs and fish heads.&lt;/p&gt;
&lt;p&gt;The highlight, aside from encountering &amp;ldquo;Hot Pot&amp;rdquo; for the first time was visiting the national Panda zoo!&lt;/p&gt;
&lt;div class="book-columns flex flex-wrap"&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0183_hu_8983fa9659e64cc7.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0183_hu_9b317983f5f3d8d2.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0183_hu_8983fa9659e64cc7.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Peacock with a brilliant blue neck and trailing tail feathers stands on grass between tree trunks in Chengdu" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0185_hu_e40c69b7fcbb5152.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0185_hu_7bc06e3a06d6e0dc.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0185_hu_e40c69b7fcbb5152.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Visitors in winter coats walk a paved path under arching bamboo groves in Chengdu, China" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0187_hu_44de3484f6bdfca.JPG"
width="480" height="853" loading="lazy" decoding="async" alt="A giant panda curls up on grass beside a rock wall in a Chengdu enclosure, China" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0196_hu_d99c2bf318c3c8a4.JPG"
width="480" height="853" loading="lazy" decoding="async" alt="A giant panda walks across a leaf-strewn lawn beside a log fence in Chengdu, China" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0201_hu_95e6b4cb9e5c48d3.JPG"
width="480" height="853" loading="lazy" decoding="async" alt="A giant panda lies on its back among green undergrowth, chewing a bamboo shoot, in Chengdu, China" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0206_hu_549d6f026be91579.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0206_hu_9b75c722a7802068.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0206_hu_549d6f026be91579.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="A giant panda sits upright on leaf litter, paws outstretched, surrounded by greenery in Chengdu, China" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0207_hu_9693a62ae5378f83.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0207_hu_221f43dd9338bbef.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0207_hu_9693a62ae5378f83.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="A giant panda reclines on the forest floor with a foreleg tucked across its chest, in Chengdu, China" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0220_hu_e8e2c108f98e46ca.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0220_hu_6f22a81ee895cc10.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0220_hu_e8e2c108f98e46ca.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="A school group of children with backpacks gathers on a paved plaza while adults direct them, Chengdu, China" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0361_hu_d7713d3a4546b1b7.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0361_hu_c40fd3aa51eb769f.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0361_hu_d7713d3a4546b1b7.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="A red panda perches on log beams beside a squash hung from a rope in a Chengdu enclosure, China" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0579_hu_e0ce6ae3bfffe449.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0579_hu_bcfb95d52ce2a611.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0579_hu_e0ce6ae3bfffe449.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="An empty paved path curves through a tunnel of tall bamboo arching overhead in Chengdu, China" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0581_hu_b70997d7a44a7c48.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0581_hu_1b70197b1ec217e5.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0581_hu_60e8e77c5e092e4e.jpeg 800w, https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0581_hu_b70997d7a44a7c48.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="A cyclist passes giant panda topiaries and yellow flowerbeds in front of a building under construction, Chengdu, China" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0583_hu_b8f15de98742deba.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0583_hu_da283138b37ae8d0.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0583_hu_b8f15de98742deba.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Hundreds of orange and teal share bikes packed along a city sidewalk below shop signs in Chengdu, China" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0584_hu_cb6865e40e331783.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0584_hu_d40810d6398d2f6c.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0584_hu_cb6865e40e331783.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Glass towers rise above a domed shopping podium with a Starbucks at street level in Chengdu, China" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0585_hu_61b619252d1a2843.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0585_hu_a4d1ccc9f68fd5d1.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/chengdu/IMG_0585_hu_61b619252d1a2843.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="A whole cooked crab on a white plate with prawns and a mussel shell behind it, Chengdu, China" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</content:encoded></item><item><title>Beijing</title><link>https://jva.lol/travelog/world-trip-2018/china/beijing/</link><pubDate>Sun, 04 Nov 2018 00:00:00 +0000</pubDate><guid>https://jva.lol/travelog/world-trip-2018/china/beijing/</guid><description> Beijing # Beijing is huge. I mean… just huge. There’s really no other way to put it. Everywhere you go, everything is overwhelming. From the size of the buildings to the number of people. It was here that I ate a roasted tarantula on a $500 dare from my brother. I should mention my dad at one first. So I knew it was safe.</description><content:encoded>&lt;h2 id="beijing"&gt;
Beijing
&lt;a class="anchor" href="#beijing"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Beijing is huge. I mean… just huge. There&amp;rsquo;s really no other way to put it. Everywhere you go, everything is overwhelming. From the size of the buildings to the number of people. It was here that I ate a roasted tarantula on a $500 dare from my brother. I should mention my dad at one first. So I knew it was safe.&lt;/p&gt;
&lt;div class="book-columns flex flex-wrap"&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0290_hu_73f92d536b27e630.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0290_hu_7cc25c717125bcdb.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0290_hu_2688a6d35229347.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0290_hu_73f92d536b27e630.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0290_hu_52b8e659f2737227.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="The Great Wall snakes along a ridge below craggy mountains near Beijing, a red pavilion tower in the foreground" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0293_hu_ba36e1cebb0c3541.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0293_hu_c0435bc37523db5.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0293_hu_59ae1fb54f6cfc08.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0293_hu_ba36e1cebb0c3541.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0293_hu_d45e10ee68369299.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Aerial view of the Juyong Pass fortress and pavilions, the Great Wall climbing the mountainsides beyond" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0299_hu_5850bd01df18157a.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0299_hu_2c9c32d32c6c11bb.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0299_hu_89e746c0112f4077.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0299_hu_5850bd01df18157a.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0299_hu_117a6324cac6aa55.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Stepped section of the Great Wall climbs a scrubby hillside toward a watchtower with a pagoda-roofed gate tower at left" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0309_hu_a96b0c3ee53629d4.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0309_hu_f7a1dcfb9a9787eb.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0309_hu_da33414e6826521.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0309_hu_a96b0c3ee53629d4.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0309_hu_70cd81f12866833b.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Visitors climb a steep stretch of the Great Wall, a watchtower and valley parking area far below" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0319_hu_b051cdee5ba5a8e0.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0319_hu_177f92f475230ade.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0319_hu_8e9bae5f63ccd012.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0319_hu_b051cdee5ba5a8e0.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0319_hu_e1ff66b1f6a85068.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Curving battlements and steps of the Great Wall lead past a tiled-roof watchtower above hazy ridges" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0320_hu_280ad7ae36e06ddf.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0320_hu_bfa2753054454da8.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0320_hu_640dd66f01c121e5.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0320_hu_280ad7ae36e06ddf.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0320_hu_94199f6abd4187f4.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Double-roofed watchtower on the Great Wall overlooking a deep valley with a winding river and road" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0325_hu_6b16908291821b22.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0325_hu_9c71cf970dbddfb8.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0325_hu_ca2dda61101cb44c.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0325_hu_6b16908291821b22.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0325_hu_70d3e96151cd87a7.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Hikers dot a steep ridge of the Great Wall above a carved white marker stone with Chinese characters" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0371_hu_3ac6f1f11e2a9c93.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0371_hu_275825622fed555c.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0371_hu_b8216f84eeef34d.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0371_hu_3ac6f1f11e2a9c93.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0371_hu_a57281439045130e.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="The Zhengyangmen gate tower rises over a Beijing boulevard as a car passes gold-colored railings" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0349_hu_df797e9a916aa3bc.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0349_hu_5194dbbe2b94963b.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0349_hu_caeeced9d3159e9.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0349_hu_df797e9a916aa3bc.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0349_hu_f4dffc6ea551db74.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Hazy layers of mountain ridges fade into gray sky beyond dark treetops and Great Wall battlements" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0374_hu_cf4530c0ef93b73f.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0374_hu_cd76e259131741a2.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0374_hu_34cf7ae373293be9.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0374_hu_cf4530c0ef93b73f.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0374_hu_fe4a02d168779422.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Crowds queue on Tiananmen Square near the Monument to the People&amp;rsquo;s Heroes and the Great Hall of the People" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0388_hu_da37c10ed9031a4f.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0388_hu_175f2077fb1e8f35.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0388_hu_326172586869d467.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0388_hu_da37c10ed9031a4f.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0388_hu_9412652d89feab1f.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Tour groups gather in a vast stone courtyard of the Forbidden City ringed by red halls with golden roofs" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0390_hu_48dcda27493cfed7.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0390_hu_107bd5e8c9008507.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0390_hu_81b8f78b187d0450.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0390_hu_48dcda27493cfed7.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0390_hu_b7fb85e4d445f4d1.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="The Hall of Supreme Harmony in the Forbidden City atop tiers of carved white marble balustrades" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0400_hu_2336de273fe1e6c1.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0400_hu_21fcf492185e092b.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0400_hu_867e343af0eb4193.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0400_hu_2336de273fe1e6c1.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0400_hu_54b165803a09b048.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Crowds of visitors stream toward a golden-roofed palace hall in the Forbidden City" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0413_hu_6491525926cc6fcc.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0413_hu_1ad7685261408e2f.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0413_hu_514ef3b95733ed1d.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0413_hu_6491525926cc6fcc.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0413_hu_5fb8d97d5559610c.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Weathered, hole-pocked scholar rocks beside a carved marble stairway in the Forbidden City&amp;rsquo;s garden" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0414_hu_a53ee846ed00046c.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0414_hu_c60784fc6cb79a60.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0414_hu_fe4f17bce437b745.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0414_hu_a53ee846ed00046c.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0414_hu_37b940ed25c053dc.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Silhouetted visitors exit a massive studded palace gate framing the hilltop pavilion of Jingshan Park" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0418_hu_dea9052555885a03.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0418_hu_e63982c6105de1ab.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0418_hu_10b0a4ce5637fc72.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0418_hu_dea9052555885a03.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0418_hu_bc7abd1c24f9a87d.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="The Forbidden City&amp;rsquo;s north gate tower with tiered golden roofs seen across its stone-walled moat" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0431_hu_bdc0c8b4073cdaa2.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0431_hu_d3d005960630a6f2.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0431_hu_ede950c84e423f1.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0431_hu_bdc0c8b4073cdaa2.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/DSC_0431_hu_4b5af915087b6cd9.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Ornate blue-and-gold archway with dragon panels spanning the entrance to Wangfujing snack street in Beijing" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0131_hu_5d0378a93197a33b.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0131_hu_35dc42877cf0324f.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0131_hu_5d0378a93197a33b.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Four men pose on a brick terrace at the Ming Tombs, a golden-roofed hall rising behind autumn trees" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0138_hu_92c46fbaebecc0a4.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0138_hu_ae30f511f2e64d2c.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0138_hu_92c46fbaebecc0a4.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Man walks a cobbled path past a painted gateway toward the red Soul Tower at the Ming Tombs" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0141_hu_8ad620e8444d6e3b.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0141_hu_2c3e96f0f2b574ba.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0141_hu_8ad620e8444d6e3b.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Skewers of fried scorpions stand upright in wooden buckets at a Beijing street-food stall" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0155_hu_e2babea97e5a6be6.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0155_hu_11a48ae3f28680e4.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0155_hu_a181a5bcf0afb980.jpeg 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0155_hu_e2babea97e5a6be6.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Shoppers stroll the Wangfujing pedestrian street at dusk beneath lit signs and yellow ginkgo trees" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0161_hu_dab0fd80387df515.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0161_hu_4bda4d44d3fd83a.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0161_hu_e6ffceb5ba49c0ee.jpeg 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0161_hu_dab0fd80387df515.jpeg 1200w, https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0161_hu_8477223c6ac2644.jpeg 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="401" loading="lazy" decoding="async" alt="Panorama of the Forbidden City&amp;rsquo;s red Meridian Gate wings, a man checking his phone in the paved plaza" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0171_hu_fb9ace79fb6aac0e.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0171_hu_fb2040cf95273afd.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0171_hu_93a6346a97b4d012.jpeg 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0171_hu_fb9ace79fb6aac0e.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Busy food court crowded with diners at white tables under an open industrial ceiling in Beijing" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0174_hu_8988359beaafb9da.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0174_hu_c1c0a6aeb926a10.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0174_hu_1bb2d615a992a9c6.jpeg 800w, https://jva.lol/travelog/world-trip-2018/china/beijing/IMG_0174_hu_8988359beaafb9da.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Indoor hotel pool with lotus-topped stone columns, a tiered fountain, and palm trees under warm lights" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</content:encoded></item><item><title>Shanghai / Suzhou</title><link>https://jva.lol/travelog/world-trip-2018/china/shanghai/</link><pubDate>Thu, 01 Nov 2018 00:00:00 +0000</pubDate><guid>https://jva.lol/travelog/world-trip-2018/china/shanghai/</guid><description> Shanghai and Suzhou # Shanghai is, of course, amazing. We also took some time to visit a small (for the chinese) nearby town called Suzhou. Incredible beauty and history.</description><content:encoded>&lt;h2 id="shanghai-and-suzhou"&gt;
Shanghai and Suzhou
&lt;a class="anchor" href="#shanghai-and-suzhou"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Shanghai is, of course, amazing. We also took some time to visit a small (for the chinese) nearby town called Suzhou. Incredible beauty and history.&lt;/p&gt;
&lt;div class="book-columns flex flex-wrap"&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0009_hu_bdb821ac1f77b848.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0009_hu_a15e1e6c2269e843.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0009_hu_4b073dd1433cff89.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0009_hu_bdb821ac1f77b848.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0009_hu_fde5e861aa099360.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="An ornate carved grey stone gateway with a Chinese inscribed plaque and figure reliefs, Shanghai, China" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0011_hu_3ad1d647f508159e.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0011_hu_c34d8bc9353dac99.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0011_hu_4fd5a085fb25a227.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0011_hu_3ad1d647f508159e.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0011_hu_dc9d62b225edcc38.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="A tiled roof and carved stone gateway with an inscribed plaque, framed by dark pillars, Shanghai, China" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0014_hu_e1ebad0a75667f06.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0014_hu_d850e7e8f972d729.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0014_hu_7440dc3911026719.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0014_hu_e1ebad0a75667f06.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0014_hu_5f2ff7aed2688c0f.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Visitors gather in a tiled pavilion above a rockery in a classical Chinese garden, its roof reflected in a lily-covered pond" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0022_hu_603290318e3c6cbc.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0022_hu_390425ee72effa65.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0022_hu_5b4eeea893e4f693.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0022_hu_603290318e3c6cbc.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0022_hu_971ee022f8285a53.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="A red-leafed maple grows out of a limestone rockery beside a whitewashed garden wall with a latticed window in Shanghai" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0024_hu_bf87d277492f3cea.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0024_hu_cd40350a93195236.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0024_hu_f0cb9c93d81d2775.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0024_hu_bf87d277492f3cea.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0024_hu_c4ddc8ff8322ef28.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="A stacked scholar&amp;rsquo;s rock full of holes and mossy ledges stands against a weather-stained white garden wall in Shanghai" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0036_hu_761022efc8cbddfd.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0036_hu_125745697d461662.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0036_hu_8e7784c620ea3ed6.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0036_hu_761022efc8cbddfd.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0036_hu_60ce59768024923f.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="A man sits grinning in a carved wooden chair while a woman laughs beside him, surrounded by scroll paintings in a Shanghai art shop" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0050_hu_1e32dd34ec8ef5f5.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0050_hu_c676d8ebf219570a.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0050_hu_8df7e7e2da9773a1.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0050_hu_1e32dd34ec8ef5f5.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0050_hu_61cbc4e5f85be86.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="A round silk embroidery of a water town, with tiled houses, an arched stone bridge and two boats, displayed on a stand for sale" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0062_hu_5b81f6447411f926.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0062_hu_2c349658f611fa7a.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0062_hu_89c9ee0f2673493c.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0062_hu_5b81f6447411f926.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0062_hu_4723be9875f59c62.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="A visitor with a red drawstring bag stands in a circular moon gate, looking out at tourists climbing a garden rockery in Shanghai" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0067_hu_13efc2dcb00c7b73.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0067_hu_6face74a0348c240.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0067_hu_f55fdc89311e594.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0067_hu_13efc2dcb00c7b73.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0067_hu_5f376136aaad4470.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="A woman with a red umbrella walks a mossy rock ledge along a green garden pond, tiled roofs and autumn trees behind her" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0069_hu_e56795eb227227b4.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0069_hu_5f076dc86bda417b.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0069_hu_c0eecba2cc8c2551.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0069_hu_e56795eb227227b4.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0069_hu_9b7cb1a75b558288.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="A man in a grey jacket stands on a garden path beside a hollow tree trunk and bamboo fence, tiled pavilions across the pond" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0074_hu_68dbb632fde40f4a.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0074_hu_709837297f108302.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0074_hu_24ca1c8a99b9e06b.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0074_hu_68dbb632fde40f4a.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0074_hu_44e0e9f36c5cbae2.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Tourists stand under the sweeping upturned tiled roof of a garden pavilion, with covered walkways and pines around it" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0075_hu_7e0a4013485a22d2.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0075_hu_d906db942d5c6aa7.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0075_hu_adc9b9c59ddb6681.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0075_hu_7e0a4013485a22d2.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0075_hu_589e021f86414ced.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="An old pine leans horizontally over a bamboo garden fence, its flat canopy spread wide as visitors walk past a white wall" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0076_hu_807a828b61e4d11.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0076_hu_1b5efec3a9e2144d.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0076_hu_bd66cab412e54d15.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0076_hu_807a828b61e4d11.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0076_hu_44c6cd857808d00c.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Three people stand talking in a Chinese garden courtyard beneath a split old tree trunk, with tiled roofs and pines behind them" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0085_hu_6c33f604cd86bb8f.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0085_hu_9548df3a414e23e3.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0085_hu_ab2b7120a45ad8af.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0085_hu_6c33f604cd86bb8f.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0085_hu_afb9f69b7e69b200.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="A mantel clock, blue-and-white vase and green stone sit below a latticed window looking onto bamboo, flanked by calligraphy scrolls" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0097_hu_5dd68edb0d514005.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0097_hu_ad2c4e31dfb5e78b.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0097_hu_263ff668a1efc18c.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0097_hu_5dd68edb0d514005.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0097_hu_d9979318c7cb1942.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Three visitors stand at the foot of a garden rockery under curving tiled roofs and a grey sky in Shanghai" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0099_hu_6985cdea1773c71c.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0099_hu_2edf32021c690da0.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0099_hu_6112fa104105e2b5.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0099_hu_6985cdea1773c71c.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0099_hu_fbe07df1db517a00.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Two women taking phone photos stand on a mossy rock ledge above a still green pond, reflected below a white garden wall" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0147_hu_7cedc77d8928a197.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0147_hu_eb6a05d4cb7a969d.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0147_hu_80fd868d7570f7ab.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0147_hu_7cedc77d8928a197.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0147_hu_50e4470cec4e1199.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="A woman in a dark jacket sorts white silkworm cocoons at a workbench in a silk factory, green baskets beside her" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0170_hu_616fc99f77e377b5.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0170_hu_1f8d51b9df774bc2.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0170_hu_b40eedb73cf6f597.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0170_hu_616fc99f77e377b5.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0170_hu_daabd5b57f4d4800.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Visitors on a stone arch bridge below an ivy-covered city wall and tiered wooden gate tower in China" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0190_hu_d2f9ac616c468e09.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0190_hu_efd0489808d8717d.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0190_hu_c6ea21e8106874ec.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0190_hu_d2f9ac616c468e09.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0190_hu_9007f141fcf40528.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="People crossing a stone arch bridge over a canal beside tiled-roof wooden houses in a Chinese water town" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0198_hu_d19d95e5330ab750.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0198_hu_51b9876f1d691256.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0198_hu_411cf83c86f82a9d.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0198_hu_d19d95e5330ab750.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0198_hu_39aa576059f342bd.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Carved grey stone gateway with an inscribed plaque and upswept tiled roof, seen from a dark courtyard in China" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0208_hu_95573ce3770fb0fe.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0208_hu_885be89f4dc0e165.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0208_hu_5e043ef4778ed023.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0208_hu_95573ce3770fb0fe.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0208_hu_a7f21f2d5bfddb28.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="View from a boat of a stone arch bridge crowded with people, red lanterns hanging along the canal in China" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0213_hu_b0d6c6241e757045.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0213_hu_dc33e0445930418a.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0213_hu_54885e4fc046d3bf.JPG 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0213_hu_b0d6c6241e757045.JPG 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/DSC_0213_hu_12220f9bdeb08918.JPG 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="800" loading="lazy" decoding="async" alt="Blue-canopied wooden boats moored on a canal below a stone arch bridge and whitewashed houses in China" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0087_hu_8a8dea6631792f60.JPG" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0087_hu_eabe56dd45f683a0.JPG 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0087_hu_8a8dea6631792f60.JPG 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Shanghai at night from high above, the lit Oriental Pearl Tower among skyscrapers along the Huangpu River" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0090_hu_21c7df29149de1bd.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0090_hu_47063054d387eb44.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0090_hu_21c7df29149de1bd.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Looking up at night at the Jin Mao Tower and the twisting Shanghai Tower lit red along its edge" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0093_hu_58d1212f1f733738.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0093_hu_c648dff88d263ba5.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0093_hu_58d1212f1f733738.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="The Shanghai World Financial Center at night, its wedge-shaped tower and trapezoid opening seen from street level" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0096_hu_52c6bc4ea87d10bc.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0096_hu_ed751ddaea72560a.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0096_hu_63857b711f13f739.jpeg 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0096_hu_52c6bc4ea87d10bc.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Hazy daytime view over Shanghai from a high window, office towers crowding a bend in the Huangpu River" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0101_hu_8c1d186e7b8a33e3.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0101_hu_faa3b0756456105c.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0101_hu_1131bb75b8f6197e.jpeg 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0101_hu_8c1d186e7b8a33e3.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Classical Chinese garden in the rain: a tiled pavilion and white walls above a green pond with lily pads" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0118_hu_7b112147138dff84.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0118_hu_c0753b8ef68b1c5b.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0118_hu_a812db92693c81a1.jpeg 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0118_hu_7b112147138dff84.jpeg 1200w, https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0118_hu_b23a8e1cb21279c0.jpeg 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="333" loading="lazy" decoding="async" alt="Panorama from a bridge over a wide canal in China, a man in an orange cap on the steps and a gate tower beyond" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0131_hu_ed66141ae332f231.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0131_hu_cfa505c1eb4835df.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0131_hu_27bfeabad8929ae3.jpeg 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0131_hu_ed66141ae332f231.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Three Shanghai skyscrapers seen from below against grey cloud: the World Financial Center, Jin Mao and Shanghai Tower" /&gt;
&lt;img src="https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0132_hu_a00cd25abce0674.jpeg" srcset="https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0132_hu_77a3666060710284.jpeg 480w, https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0132_hu_4d021942acc4035f.jpeg 800w, https://jva.lol/travelog/world-trip-2018/china/shanghai/IMG_0132_hu_a00cd25abce0674.jpeg 1200w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Beds of red, pink and white flowers beside a wide Shanghai road, office towers rising behind trees under blue sky" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</content:encoded></item><item><title>Denver</title><link>https://jva.lol/haikulog/denver/</link><pubDate>Thu, 17 Aug 2017 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/denver/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;I am in Denver&lt;/p&gt;
&lt;p&gt;It is just like Salt Lake City&lt;/p&gt;
&lt;p&gt;Except, like, bigger&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jva.lol/haikulog/denver/Denver_hu_2416369bd2bd8bbf.jpg" srcset="https://jva.lol/haikulog/denver/Denver_hu_cc82fa74dc7106c4.jpg 480w, https://jva.lol/haikulog/denver/Denver_hu_ac37fa95738e76c.jpg 800w, https://jva.lol/haikulog/denver/Denver_hu_2416369bd2bd8bbf.jpg 1200w, https://jva.lol/haikulog/denver/Denver_hu_3643c8e5fd4eeae3.jpg 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="536" loading="lazy" decoding="async" alt="Denver" /&gt;&lt;/p&gt;</content:encoded></item><item><title>In defense of the new MacBook Pro touchbar</title><link>https://jva.lol/haikulog/in-defense-of-the-touchbar/</link><pubDate>Tue, 15 Aug 2017 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/in-defense-of-the-touchbar/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;It is a fun way&lt;/p&gt;
&lt;p&gt;To do things you did before&lt;/p&gt;
&lt;p&gt;Why not something new?&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jva.lol/haikulog/in-defense-of-the-touchbar/touchbar_hu_92648164b88dbc2d.jpg" srcset="https://jva.lol/haikulog/in-defense-of-the-touchbar/touchbar_hu_5f5ce524d81a52f3.jpg 480w, https://jva.lol/haikulog/in-defense-of-the-touchbar/touchbar_hu_92648164b88dbc2d.jpg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="450" loading="lazy" decoding="async" alt="In defense of the new MacBook Pro touchbar" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Waking up</title><link>https://jva.lol/haikulog/waking-up/</link><pubDate>Sat, 14 Feb 2015 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/waking-up/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;Nope, nope, nope, nope, nope&lt;/p&gt;
&lt;p&gt;Nope, nope, nope, nope, nope, nope, nope&lt;/p&gt;
&lt;p&gt;Nope, nope, nope, nope, nope&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jva.lol/haikulog/waking-up/waking-up.png"
width="400" height="385" loading="lazy" decoding="async" alt="&amp;ndash;Waking up&amp;ndash;" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Getting out of bed</title><link>https://jva.lol/haikulog/getting-out-of-bed/</link><pubDate>Sat, 14 Feb 2015 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/getting-out-of-bed/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;No no no no no&lt;/p&gt;
&lt;p&gt;No no no no no no no&lt;/p&gt;
&lt;p&gt;No no no no no&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jva.lol/haikulog/getting-out-of-bed/fetal-bed_hu_8796c4f87128da29.jpg"
width="480" height="309" loading="lazy" decoding="async" alt="Bed" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Space-time</title><link>https://jva.lol/haikulog/space-time/</link><pubDate>Fri, 03 May 2013 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/space-time/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;Time and space are one&lt;/p&gt;
&lt;p&gt;So it is all relative&lt;/p&gt;
&lt;p&gt;Please pardon the pun&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jva.lol/haikulog/space-time/space-time_hu_b5c58b5603c09e84.jpg"
width="480" height="240" loading="lazy" decoding="async" alt="&amp;ndash;&amp;ldquo;Space-time&amp;rdquo;&amp;ndash;" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Evening</title><link>https://jva.lol/haikulog/evening/</link><pubDate>Mon, 22 Apr 2013 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/evening/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;In the evening&lt;/p&gt;
&lt;p&gt;I am joined by Page and Plant&lt;/p&gt;
&lt;p&gt;but do not ascend&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jva.lol/haikulog/evening/evening_hu_8d1501f5f7f1c696.jpg" srcset="https://jva.lol/haikulog/evening/evening_hu_2135d7d4db70caa7.jpg 480w, https://jva.lol/haikulog/evening/evening_hu_dc5e9d0571d918da.jpg 800w, https://jva.lol/haikulog/evening/evening_hu_8d1501f5f7f1c696.jpg 1200w, https://jva.lol/haikulog/evening/evening_hu_38c5388b0b14167b.jpg 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="750" loading="lazy" decoding="async" alt="&amp;ldquo;Evening&amp;rdquo;" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Chairs</title><link>https://jva.lol/haikulog/chairs/</link><pubDate>Sun, 14 Apr 2013 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/chairs/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;Made of good hard wood&lt;/p&gt;
&lt;p&gt;Sitting straight is important&lt;/p&gt;
&lt;p&gt;If you like your spine&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jva.lol/haikulog/chairs/chair.jpg"
width="414" height="600" loading="lazy" decoding="async" alt="&amp;ldquo;Chairs&amp;rdquo;" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Breakfast</title><link>https://jva.lol/haikulog/breakfast/</link><pubDate>Sun, 14 Apr 2013 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/breakfast/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;The first and best meal&lt;/p&gt;
&lt;p&gt;Forget brunch, breakfast is good&lt;/p&gt;
&lt;p&gt;enough to eat twice&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jva.lol/haikulog/breakfast/breakfast_hu_9ada59f5c3fa6fbd.jpg"
width="480" height="320" loading="lazy" decoding="async" alt="Breakfast" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Music</title><link>https://jva.lol/haikulog/music/</link><pubDate>Sat, 13 Apr 2013 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/music/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;Listen to music&lt;/p&gt;
&lt;p&gt;From Mozart to the Beatles&lt;/p&gt;
&lt;p&gt;Feel infinity&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jva.lol/haikulog/music/music_hu_ff512776766c4d05.jpg" srcset="https://jva.lol/haikulog/music/music_hu_bee8ac6d2332cccb.jpg 480w, https://jva.lol/haikulog/music/music_hu_cf1e737761310ff2.jpg 800w, https://jva.lol/haikulog/music/music_hu_ff512776766c4d05.jpg 1200w, https://jva.lol/haikulog/music/music_hu_b486a3e1d42b4862.jpg 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="900" loading="lazy" decoding="async" alt="Music" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Bubbles</title><link>https://jva.lol/haikulog/bubbles/</link><pubDate>Sat, 13 Apr 2013 00:00:00 +0000</pubDate><guid>https://jva.lol/haikulog/bubbles/</guid><description>Top Secret</description><content:encoded>&lt;p&gt;Bubbles down the drain&lt;/p&gt;
&lt;p&gt;Remind me I am one too&lt;/p&gt;
&lt;p&gt;One day I will pop&lt;/p&gt;
&lt;p&gt;&lt;img src="https://jva.lol/haikulog/bubbles/bubbles_hu_a93f31168354b422.jpg" srcset="https://jva.lol/haikulog/bubbles/bubbles_hu_ac48c1c306ca49ba.jpg 480w, https://jva.lol/haikulog/bubbles/bubbles_hu_2adee919a40a9dd6.jpg 800w, https://jva.lol/haikulog/bubbles/bubbles_hu_a93f31168354b422.jpg 1200w, https://jva.lol/haikulog/bubbles/bubbles_hu_597e4553ed2fd0f0.jpg 1600w" sizes="(max-width: 768px) 100vw, 1000px"
width="1200" height="901" loading="lazy" decoding="async" alt="Bubbles" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Ferry to France</title><link>https://jva.lol/travelog/europe-2016/ireland/ferry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jva.lol/travelog/europe-2016/ireland/ferry/</guid><description> Europe Part 1.2 - Ferry to France # Ferry #</description><content:encoded>&lt;h1 id="europe-part-12---ferry-to-france"&gt;
Europe Part 1.2 - Ferry to France
&lt;a class="anchor" href="#europe-part-12---ferry-to-france"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;h2 id="ferry"&gt;
Ferry
&lt;a class="anchor" href="#ferry"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4690_hu_bc27d7b4dad2d2e2.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4690_hu_cdac2a5d9da691e4.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4690_hu_bc27d7b4dad2d2e2.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="600" loading="lazy" decoding="async" alt="The Irish Ferries ship Ulysses docked beside the terminal building at Dublin Port under a clear blue sky" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4692_hu_e938022dc96491ae.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4692_hu_6cef30a8daa32ce3.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4692_hu_e938022dc96491ae.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="178" loading="lazy" decoding="async" alt="Panorama from a ferry&amp;rsquo;s top deck leaving Dublin Port, with docks, cranes, and sunlit sea stretching to the horizon" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4693_hu_eeba9d9c19cf1af2.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4693_hu_554cbb0d1f9f4c59.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4693_hu_eeba9d9c19cf1af2.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="213" loading="lazy" decoding="async" alt="Dublin Bay from a ferry deck, the twin striped Poolbeg chimneys and port cranes low on the horizon" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4695_hu_73380bfc7417abdb.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4695_hu_e27c2dae46c64414.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4695_hu_73380bfc7417abdb.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="600" loading="lazy" decoding="async" alt="Man with a blue backpack takes a selfie beside a modern arched footbridge in a sunny harbor town" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4705_hu_4686dab6ff7eed2e.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4705_hu_59abe301afcedc40.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4705_hu_4686dab6ff7eed2e.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Selfie at a ferry railing with a gray navy warship moored across the harbor under an overcast sky" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4712_hu_17b7b85dfb27c6ee.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4712_hu_db1b2ef509e286f6.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4712_hu_17b7b85dfb27c6ee.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="259" loading="lazy" decoding="async" alt="Ferry stern deck with sun loungers as the ship leaves Portsmouth harbor, the Spinnaker Tower on the skyline" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4719_hu_aff4925df273e12f.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4719_hu_53f2cae4eb45fd5a.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4719_hu_aff4925df273e12f.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="600" loading="lazy" decoding="async" alt="Man in a navy rain jacket and shorts stands on a ferry&amp;rsquo;s blue upper deck under heavy gray clouds" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4734_hu_c7fcc2dad977e64a.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4734_hu_7c2b31f3121df674.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4734_hu_c7fcc2dad977e64a.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="600" loading="lazy" decoding="async" alt="Passengers at a ferry deck railing watch a long sandy beach and low coastline pass under storm clouds" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4735_hu_8d3171b79204fb3.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4735_hu_fd2d3807c9545a73.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4735_hu_8d3171b79204fb3.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Two soldiers in camouflage with rifles stand guard beside a stone planter at a ferry-port checkpoint, seen from a vehicle" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4723_hu_3bdd2bd6c10ffb2e.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4723_hu_d98a9e5f6c619bc.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4723_hu_3bdd2bd6c10ffb2e.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="600" loading="lazy" decoding="async" alt="Smiling man in a navy jacket with a backpack holds a drink on a ferry deck, low coastline behind him" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4726_hu_b4607b4aceca8579.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4726_hu_d9ed7b0b388c9582.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/ferry/IMG_4726_hu_b4607b4aceca8579.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="600" loading="lazy" decoding="async" alt="Man with a backpack grins while holding a pint of beer at a ferry railing under dark clouds at sea" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Belgium</title><link>https://jva.lol/travelog/europe-2016/belgium/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jva.lol/travelog/europe-2016/belgium/</guid><description> Europe Part 3 - Belgium # Brussels # I was only in Belgium for one night, but I had a lot of fun. I stayed in Brussels. It’s a beautiful city, of course. Birthplace of Audrey Hepburn, location of an escape room I nearly had a chance to try and escape from except for the drunk northern irish couple I met and hung with until the girl puked everywhere and gave me 50 euros for some reason. Ah. Belgium.</description><content:encoded>&lt;h1 id="europe-part-3---belgium"&gt;
Europe Part 3 - Belgium
&lt;a class="anchor" href="#europe-part-3---belgium"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;h2 id="brussels"&gt;
Brussels
&lt;a class="anchor" href="#brussels"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I was only in Belgium for one night, but I had a lot of fun. I stayed in Brussels. It&amp;rsquo;s a beautiful city, of course. Birthplace of Audrey Hepburn, location of an escape room I nearly had a chance to try and escape from except for the drunk northern irish couple I met and hung with until the girl puked everywhere and gave me 50 euros for some reason. Ah. Belgium.&lt;/p&gt;
&lt;div class="book-columns flex flex-wrap"&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/europe-2016/belgium/IMG_5057.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="Massive ornate stone courthouse with a scaffolded gold dome rising over a Brussels boulevard with tram tracks" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/belgium/IMG_5059.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="Selfie of a bearded man on a wide Brussels plaza, a tall white war memorial column rising behind him" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/belgium/IMG_5067.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="Close selfie of a smiling bearded man holding up a bottle of Hoegaarden beer under a partly cloudy Belgian sky" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/belgium/IMG_5077.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="Gothic church facade in Brussels with pointed spires and a carved arched portal, a woman walking past on the sidewalk" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/belgium/IMG_5079.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="A man photographs a small formal garden in Brussels with trimmed hedges, flower beds, and shade trees" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/belgium/IMG_5080.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="Gothic church with a slender spire beside a Brussels square ringed by columns topped with green statues" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/belgium/IMG_5082.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="Neoclassical columned church with a bell tower on a Brussels square, an equestrian statue standing in front" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/europe-2016/belgium/IMG_5087.jpeg"
width="300" height="101" loading="lazy" decoding="async" alt="Panorama of a long ornate palace facade across a cobbled Brussels plaza, a black limousine parked in the foreground" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/belgium/IMG_5092.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="A hand holds a sugar-crusted Belgian waffle in a paper wrapper above cobblestones and tram tracks" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/belgium/IMG_5093.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="Long fountain pool with rows of small water jets along a Brussels street, people strolling past old buildings" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/belgium/IMG_5095.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="Apartment bedroom in Belgium with a wicker bed, wall tapestry, bookshelf, and a desk by a bright window" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/belgium/IMG_5098.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="Stone Gothic church with a dark rounded bell tower under a deep blue Brussels sky, a tall street lamp beside it" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/belgium/IMG_5099.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="Stuffed pita topped with diced tomatoes in a basket, four ramekins of sauces on a tray at an outdoor table in Belgium" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/belgium/IMG_5104.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="Brass plaque on a brick facade in Brussels marking the 1929 birthplace of actress Audrey Hepburn" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</content:encoded></item><item><title>The Louvre</title><link>https://jva.lol/travelog/europe-2016/france/paris/louvre/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jva.lol/travelog/europe-2016/france/paris/louvre/</guid><description> Europe Part 2.2.1 - The Louvre, Paris, France # The Louvre #</description><content:encoded>&lt;h1 id="europe-part-221---the-louvre-paris-france"&gt;
Europe Part 2.2.1 - The Louvre, Paris, France
&lt;a class="anchor" href="#europe-part-221---the-louvre-paris-france"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;h2 id="the-louvre"&gt;
The Louvre
&lt;a class="anchor" href="#the-louvre"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;div class="book-columns flex flex-wrap"&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_4806.jpeg"
width="300" height="73" loading="lazy" decoding="async" alt="Panorama of the Louvre courtyard, visitors crossing the plaza around the glass pyramids" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_4811.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="Selfie of a bearded man wearing a blue backpack in the Louvre courtyard, glass pyramid and palace wings behind" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_4817.jpeg"
width="300" height="85" loading="lazy" decoding="async" alt="Panorama of the nearly empty Louvre courtyard with ornate lampposts and the glass pyramid at left" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_4826.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="The Luxor obelisk and a large Ferris wheel at Place de la Concorde against dramatic grey clouds" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_4908.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="Crowds and tour buses outside the courtyard facade of the Palais Royal in Paris on an overcast day" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_4950.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="The Mona Lisa in its gilded frame on a plain wall at the Louvre" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_4955.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="The Winged Victory of Samothrace atop its ship-prow pedestal at the Louvre, visitors gathered below" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_4963.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="Gilt-framed painting at the Louvre of a young woman with a faint halo floating in dark water" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_4964.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="Visitors stand before a wall-sized painting of a cavalry battle scene in a red-walled Louvre gallery" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_4969.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="Bronze relief of a reclining stag with tall antlers mounted along a stone staircase in the Louvre" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_4970.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="Visitors wander a long columned sculpture hall at the Louvre lined with white marble statues" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_4980.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="Opulent dining room in the Louvre&amp;rsquo;s Napoleon III apartments, crystal chandeliers over a long set table" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_4989.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="White marble sculpture group of intertwined figures on a pedestal in a skylit Louvre gallery" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_4991.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="Tall cobalt-blue porcelain urn with ornate gilt handles and garlands beside a Louvre window" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_4999.jpeg"
width="300" height="300" loading="lazy" decoding="async" alt="Ancient Egyptian stone stela carved with three standing deities and rows of hieroglyphs at the Louvre" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_5021.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="Visitors fill a vaulted Louvre gallery of classical marble statues lit by tall windows" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_5032.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="The inverted glass pyramid hanging above shoppers in the underground mall beneath the Louvre" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_5036.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="Ornate stone facade of the Louvre&amp;rsquo;s Cour Carree courtyard under blue sky with scattered clouds" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/paris/louvre/IMG_5043.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="Traffic and a motorcyclist pass Place de la Concorde, with its obelisk and a Ferris wheel beyond" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</content:encoded></item><item><title>Howth</title><link>https://jva.lol/travelog/europe-2016/ireland/howth/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jva.lol/travelog/europe-2016/ireland/howth/</guid><description> Europe Part 1.2 - Howth, Ireland # Howth #</description><content:encoded>&lt;h1 id="europe-part-12---howth-ireland"&gt;
Europe Part 1.2 - Howth, Ireland
&lt;a class="anchor" href="#europe-part-12---howth-ireland"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;h2 id="howth"&gt;
Howth
&lt;a class="anchor" href="#howth"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/europe-2016/ireland/howth/IMG_4675_hu_1a81de5ef8ac2f9d.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/howth/IMG_4675_hu_58540c3d8556cc18.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/howth/IMG_4675_hu_1a81de5ef8ac2f9d.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="600" loading="lazy" decoding="async" alt="Selfie on the Howth cliff walk, a dirt path winding along green headlands dotted with purple heather" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/howth/IMG_4674_hu_ed59cbcba3b8c667.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/howth/IMG_4674_hu_e844ffe1b4dd1ecd.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/howth/IMG_4674_hu_ed59cbcba3b8c667.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="600" loading="lazy" decoding="async" alt="View from the Howth cliff path over the harbor, marina, and a small offshore island under an evening sky" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/howth/IMG_4678_hu_13c403e8ef24bd68.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/howth/IMG_4678_hu_ebecf8765426350.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/howth/IMG_4678_hu_13c403e8ef24bd68.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="600" loading="lazy" decoding="async" alt="Dirt cliff path at Howth curving above the sea at dusk, a distant island under blue-gray clouds" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/howth/IMG_4648_hu_f71e38362e348454.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/howth/IMG_4648_hu_2fcdd0f6ed913852.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/howth/IMG_4648_hu_f71e38362e348454.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="800" loading="lazy" decoding="async" alt="Close selfie on the rocky shore at Howth, with a headland of green cliffs and houses across the gray bay" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Dublin</title><link>https://jva.lol/travelog/europe-2016/ireland/dublin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jva.lol/travelog/europe-2016/ireland/dublin/</guid><description> Europe Part 1.1 - Dublin, Ireland # Dublin #</description><content:encoded>&lt;h1 id="europe-part-11---dublin-ireland"&gt;
Europe Part 1.1 - Dublin, Ireland
&lt;a class="anchor" href="#europe-part-11---dublin-ireland"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;h2 id="dublin"&gt;
Dublin
&lt;a class="anchor" href="#dublin"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4569_hu_1d0fdd7986f3bb3c.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4569_hu_ccb2dbefff03a1fa.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4569_hu_1d0fdd7986f3bb3c.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="800" loading="lazy" decoding="async" alt="Selfie of a bearded man outside the arched Guinness Storehouse gate in Dublin as a cyclist passes" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4565_hu_e8da5a550a18aed.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4565_hu_e9420fb31b8cf533.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4565_hu_e8da5a550a18aed.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="600" loading="lazy" decoding="async" alt="The River Liffey in Dublin sparkling under cloudy skies, an arched stone bridge and quayside traffic ahead" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4583_hu_c8aa5865b281a4ad.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4583_hu_17ffdbb6d7f4f41f.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4583_hu_c8aa5865b281a4ad.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Canal lock gates on a tree-lined stretch of canal in Dublin under heavy grey clouds, a swan on the water" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4628_hu_fec93e8cb343e16c.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4628_hu_d32ec98e45c8af70.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4628_hu_fec93e8cb343e16c.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="800" loading="lazy" decoding="async" alt="Three friends lean in smiling for a selfie in a dim Dublin bar with a glowing backlit bar behind them" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4597_hu_225e7d7cb45393ff.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4597_hu_91ae7bce92b09534.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4597_hu_225e7d7cb45393ff.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="The stone Campanile bell tower at Trinity College Dublin, students strolling past campus signs below" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4601_hu_1330eb183f02458d.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4601_hu_ccc479171ce469a5.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4601_hu_1330eb183f02458d.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="600" loading="lazy" decoding="async" alt="People rest along the long grey stone facade of Trinity College&amp;rsquo;s Old Library beside a green lawn in Dublin" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4603_hu_ca962d6a55b67958.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4603_hu_d81c4dee8926aa9f.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4603_hu_ca962d6a55b67958.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="178" loading="lazy" decoding="async" alt="Panorama of a cobbled Dublin college square with a stone campanile, classical buildings, and people strolling under cloudy skies" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4616_hu_68bc20f0fb5a641.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4616_hu_ce828c9947e897dd.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4616_hu_68bc20f0fb5a641.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Bright red storefront of the Queen of Tarts bakery in Dublin, decorated with hanging flower baskets and award plaques" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4578_hu_90f3110877e52ea6.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4578_hu_f39438ae8fed7656.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4578_hu_90f3110877e52ea6.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Selfie of a bearded man with his arm around a bronze statue of a tousle-haired man in Dublin" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4596_hu_a3e48238a72a9e06.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4596_hu_813b34068dee7220.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4596_hu_a3e48238a72a9e06.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Pedestrians walk the cobbled path toward the Campanile at Trinity College Dublin, one in a jacket covered in world flags" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4608_hu_d11a356579487080.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4608_hu_801724da1725d882.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4608_hu_d11a356579487080.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Christ Church Cathedral&amp;rsquo;s stone tower rises over a Dublin street as pedestrians and a cyclist pass the crossing" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4612_hu_1766588b2f5b5966.jpeg" srcset="https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4612_hu_e7a278681c8356bd.jpeg 480w, https://jva.lol/travelog/europe-2016/ireland/dublin/IMG_4612_hu_1766588b2f5b5966.jpeg 800w" sizes="(max-width: 768px) 100vw, 1000px"
width="800" height="1066" loading="lazy" decoding="async" alt="Visitors walk beneath hanging flower baskets into the stone entrance of the Brazen Head pub in Dublin" /&gt;&lt;/p&gt;</content:encoded></item><item><title>Caen</title><link>https://jva.lol/travelog/europe-2016/france/caen/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jva.lol/travelog/europe-2016/france/caen/</guid><description> Europe Part 2.1 - Caen, France # Caen #</description><content:encoded>&lt;h1 id="europe-part-21---caen-france"&gt;
Europe Part 2.1 - Caen, France
&lt;a class="anchor" href="#europe-part-21---caen-france"&gt;#&lt;/a&gt;
&lt;/h1&gt;
&lt;h2 id="caen"&gt;
Caen
&lt;a class="anchor" href="#caen"&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;div class="book-columns flex flex-wrap"&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/europe-2016/france/caen/IMG_4775.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="Silver regional train cars painted with green and maroon stars in a rail yard, CAEN lettered on a water tank behind" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/caen/IMG_4736.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="Dimly lit stone-walled bar in Caen with rows of vodka bottles, crossed swords, and lanterns glowing orange" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/caen/IMG_4738.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="Empty rain-slicked pedestrian shopping street in Caen at night, streetlights reflecting off the wet cobblestones" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/caen/IMG_4741.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="Gothic church with a tall pointed spire under heavy gray clouds in Caen, cars passing on the street below" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/caen/IMG_4743.jpeg"
width="300" height="67" loading="lazy" decoding="async" alt="Panorama of a grassy park and paths under an overcast sky in Caen, old stone ramparts and row houses in the distance" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/caen/IMG_4746.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="Weathered medieval stone church with a square tower and partly ruined nave under gray skies in Caen" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="flex-even markdown-inner"&gt;
&lt;p&gt;&lt;img src="https://jva.lol/travelog/europe-2016/france/caen/IMG_4749.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="Selfie of a bearded man on a rainy street in Caen, the spires of a large abbey complex rising behind him" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/caen/IMG_4750.jpeg"
width="300" height="225" loading="lazy" decoding="async" alt="Neoclassical columned building in Caen behind orange construction barriers on a wet overcast street" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/caen/IMG_4751.jpeg"
width="300" height="69" loading="lazy" decoding="async" alt="Panorama of a wide gravel esplanade with flagpoles between long stone buildings under a gray sky in Caen" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/caen/IMG_4758.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="Bronze statue on a stone pedestal among flower planters on a rain-wet square in Caen, a domed church behind" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/caen/IMG_4764.jpeg"
width="300" height="400" loading="lazy" decoding="async" alt="Close selfie of a bearded man on a wet street in Caen, the stone wall of a Gothic church rising beside him" /&gt;
&lt;img src="https://jva.lol/travelog/europe-2016/france/caen/IMG_4767.jpeg"
width="300" height="83" loading="lazy" decoding="async" alt="Panorama from stone ramparts over the rooftops and church spires of Caen under an overcast sky" /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</content:encoded></item></channel></rss>