Finalize blendOS post

This commit is contained in:
askiiart 2024-09-01 23:14:28 -05:00
parent 02871d08d3
commit 0eb45fcec5
Signed by untrusted user who does not match committer: askiiart
GPG key ID: EA85979611654C30
8 changed files with 200 additions and 53 deletions

BIN
assets/blendos/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 718 KiB

View file

@ -9,10 +9,6 @@
</head> </head>
<body class="line-numbers"> <body class="line-numbers">
<h1 id="checking-out-blendos">Checking out blendOS</h1> <h1 id="checking-out-blendos">Checking out blendOS</h1>
<hr />
<p>WARNING: This page is a work-in-progress, and is very
incomplete. Read at your own risk.</p>
<hr />
<p>blendOS is self-described as "Arch Linux, made declarative, <p>blendOS is self-described as "Arch Linux, made declarative,
immutable and atomic." And yeah, that's a pretty good immutable and atomic." And yeah, that's a pretty good
description of what it is. But you can never <em>really</em> description of what it is. But you can never <em>really</em>
@ -26,27 +22,42 @@
documentation, not even <code>man</code> pages, so I gave up on documentation, not even <code>man</code> pages, so I gave up on
it very quickly. But with v4, hopefully it's improved since it very quickly. But with v4, hopefully it's improved since
then.</p> then.</p>
<p>Installation itself was simple: it's got a basic installer,
which notably allows for manual partitioning, but does
<em>not</em> allow for selecting which track to use (which we'll
get to later), though to be fair, that's <em>very</em> simple to
change post-installation.</p>
<img src="/assets/blendos/1.png"
title="blendOS live image boot: a basic GNOME desktop with a vertical white window in the center; it has the blendOS logo and a &quot;Start&quot; button, with the text &quot;Welcome to blendOS&quot;, &quot;Press Start to start installing blendOS!&quot;" alt="blendOS live image boot: a basic GNOME desktop with a vertical white window in the center; it has the blendOS logo and a &quot;Start&quot; button, with the text &quot;Welcome to blendOS&quot;, &quot;Press Start to start installing blendOS!&quot;" />
<h2 id="first-use">First use</h2> <h2 id="first-use">First use</h2>
<p>Upon first boot, blendOS drops you into a pretty standard <p>Upon first boot, blendOS drops you into a pretty standard
GNOME session, on account of the <code>/system.yaml</code> file GNOME session with a graphical setup to add a user account, set
by default:</p> timezone, and all that.</p>
<p>Here's the default <code>/system.yaml</code> file
provided:</p>
<div class="sourceCode" id="cb1"><pre <div class="sourceCode" id="cb1"><pre
class="language-yaml"><code class="language-yaml"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">impl</span><span class="kw">:</span><span class="at"> http://github.com/blend-os/tracks/raw/main</span></span> class="language-yaml"><code class="language-yaml"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">impl</span><span class="kw">:</span><span class="at"> http://github.com/blend-os/tracks/raw/main</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="fu">repo</span><span class="kw">:</span><span class="at"> https://pkg-repo.blendos.co</span></span> <span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="fu">repo</span><span class="kw">:</span><span class="at"> https://pkg-repo.blendos.co</span></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="fu">track</span><span class="kw">:</span><span class="at"> default-gnome</span></span></code></pre></div> <span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="fu">track</span><span class="kw">:</span><span class="at"> default-gnome</span></span></code></pre></div>
<p>At first I wasn't sure what impl is doing, but it seems to be <p>At first I wasn't sure what impl is doing, but according to
combined with the track to get the URL for the raw the <a
<code>yaml</code> file<a href="#fn1" class="footnote-ref" href="https://blendos.co/reference/configs/system/"><code>system.yaml</code>
id="fnref1" role="doc-noteref"><sup>1</sup></a>.</p> docs</a> seems to be combined with the track to get the URL for
<p>This is actually a really interesting bit <em>which isn't the raw <code>yaml</code> file.<a href="#fn1"
documented</em>, as it means you can just, say, host your own class="footnote-ref" id="fnref1"
track(s) for all your computers in a Git repo, and they can each role="doc-noteref"><sup>1</sup></a></p>
inherit from other configs<a href="#fn2" class="footnote-ref" <p>This is actually a really interesting bit, as it means you
id="fnref2" role="doc-noteref"><sup>2</sup></a> or be overridden can just, say, host your own track(s) for all your computers in
locally; this actually seems like a very interesting and viable a Git repo, and they can each inherit from other configs<a
way to centrally manage many computers running Linux, and given href="#fn2" class="footnote-ref" id="fnref2"
I'm constantly switching between several computers; I can just role="doc-noteref"><sup>2</sup></a> or be overridden locally;
put my config(s) in one repo, and pull from that.</p> this actually seems like a very interesting and viable way to
centrally manage many computers running Linux, and given I'm
constantly switching between several computers; I can just put
my config(s) in one repo, and pull from that.</p>
<p>(details on this at <a
href="https://blendos.co/reference/configs/system/"><code>system.yaml</code>
docs</a> -&gt; Creating a track repo/webserver)</p>
<h2 id="configuration">Configuration</h2> <h2 id="configuration">Configuration</h2>
<p>blendOS's configuration is really simple:</p> <p>blendOS's configuration is really simple:</p>
<div class="sourceCode" id="cb2"><pre <div class="sourceCode" id="cb2"><pre
@ -74,28 +85,89 @@
<span id="cb2-22"><a href="#cb2-22" aria-hidden="true" tabindex="-1"></a></span> <span id="cb2-22"><a href="#cb2-22" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb2-23"><a href="#cb2-23" aria-hidden="true" tabindex="-1"></a><span class="fu">commands</span><span class="kw">:</span></span> <span id="cb2-23"><a href="#cb2-23" aria-hidden="true" tabindex="-1"></a><span class="fu">commands</span><span class="kw">:</span></span>
<span id="cb2-24"><a href="#cb2-24" aria-hidden="true" tabindex="-1"></a><span class="at"> </span><span class="st">&#39;echo hiiiiiii &gt; /home/user/helloooooo&#39;</span></span></code></pre></div> <span id="cb2-24"><a href="#cb2-24" aria-hidden="true" tabindex="-1"></a><span class="at"> </span><span class="st">&#39;echo hiiiiiii &gt; /home/user/helloooooo&#39;</span></span></code></pre></div>
<p>It's quite basic, but blendOS actually works very well for <p>(from <a
me; I already have a Git repo of <a href="https://blendos.co/reference/configs/system/"><code>system.yaml</code>
docs</a>)</p>
<p>It's quite basic, but blendOS's design actually works very
well for me; I already have a Git repo of <a
href="https://git.askiiart.net/askiiart/configs">all my href="https://git.askiiart.net/askiiart/configs">all my
configs</a>, which are intended to be run from a clean configs</a>, which are intended to be run from a clean
installation automatically, so for blendOS I just have to put installation automatically, so for blendOS I just have to put
those scripts into the yaml file and adapt it so the packages those scripts into the yaml file and adapt it so the packages
are listed in the YAML rather than being installed with are listed in the YAML rather than being installed with
<code>pacman</code> or <code>yay</code>.</p> <code>pacman</code>, <code>paru</code> or the like (at least,
not directly, via <code>akshara</code> instead)</p>
<h2 id="problems">Problems</h2> <h2 id="problems">Problems</h2>
<p>Biggest of all blendOS's problems is how slow it is to <p><em>By far</em>, the biggest of all blendOS's problems is how
rebuild. It doesn't save "layers" of packages like <a slow it is to rebuild. It doesn't save "layers" like <a
href="https://github.com/coreos/rpm-ostree"><code>rpm-ostree</code></a> href="https://coreos.github.io/rpm-ostree/"><code>rpm-ostree</code></a>
(as used by Fedora atomic)</p> (as used by Fedora atomic); instead, it just completely rebuilds
the system every single time. Because of this, it takes a long
time to run the updater/rebuilder, even to just install one more
package.<a href="#fn3" class="footnote-ref" id="fnref3"
role="doc-noteref"><sup>3</sup></a></p>
<p>Besides that, my only complaints are:</p>
<ol type="1">
<li>The <code>akshara</code>'s (the update/rebuild tool) major
issue with reinheritance (see <a
href="https://blendos.co/reference/configs/system/"><code>system.yaml</code>
docs</a> -&gt; Inheritance).</li>
<li>Its community and issue tracking is primarily on Discord,
which is then indexed by Answer Overflow so it's searchable with
Google and the like; there's no dedicated developer space (only
one issue on <a href="https://git.blendos.co/blendOS">their
GitLab</a>, where <code>akshara</code> is hosted.) However,
given you must be pretty competent with Linux to be using
blendOS in the first place, and how small the dev team and
community is, this isn't much of an issue.</li>
<li>There's a lack of documentation for some bits, though the
docs are updated and getting new additions constantly.</li>
</ol>
<p>I've encountered more bugs and missing features since then,
but I'll talk about that in my next post, as they'll fit better
there.</p>
<h2 id="wishlist">Wishlist</h2> <h2 id="wishlist">Wishlist</h2>
<h2 id="sources">Sources</h2> <p>This is some other stuff I want, not necessarily problems,
but things I'd like added</p>
<ul> <ul>
<li>[1] <a href="https://blendos.co/">blendOS homepage</a></li> <li>I'd like an equivalent of this at the user level specifying
<li>[2] <a packages, repos, and commands for other (containerized)
href="https://blendos.co/install/post-install/intro/">blendOS distros.</li>
post-install intro</a></li> <li>I'd like to be able to automatically install blendOS - to be
able to script it rather than going through the GUI. Just a
tarball of the installed system would be great.</li>
</ul> </ul>
<h2 id="sources">Sources</h2>
<p>Sources are linked as they're used throughout, and also
listed separately here.</p>
<!-- Link definition are above, separate (rendered) links below -->
<ol type="1">
<li><a href="https://blendos.co/">blendOS Homepage</a></li>
<li><a
href="https://blendos.co/install/post-install/intro/">Introduction
to blendOS</a></li>
<li><a href="https://blendos.co/reference/">blendOS
reference</a></li>
<li><a
href="https://blendos.co/reference/configs/system/"><code>system.yaml</code>
docs</a></li>
<li><a href="https://git.blendos.co/blendOS">blendOS
GitLab</a></li>
<li><a
href="https://coreos.github.io/rpm-ostree/"><code>rpm-ostree</code>
docs</a></li>
<li><a
href="https://blendos.co/contributing/#git-structure">blendOS's
Git structure</a></li>
</ol>
<p>Note: As I write this, the docs, particularly the <a
href="https://blendos.co/reference/">blendOS reference</a>, are
being constantly revised. During the process of writing this, an
entire new section has been added, though this post doesn't
touch on that and said section is unused here - it'll come into
play in the next post.</p>
<h2 id="footnotes">Footnotes</h2> <h2 id="footnotes">Footnotes</h2>
<!-- Note if you're viewing the Markdown version: [^1] is for footnotes; that's the formatting used by Pandoc, but VS Code, for example, doesn't support it. -->
<aside id="footnotes" <aside id="footnotes"
class="footnotes footnotes-end-of-document" role="doc-endnotes"> class="footnotes footnotes-end-of-document" role="doc-endnotes">
<hr /> <hr />
@ -103,11 +175,24 @@
<li id="fn1"><p>That is, <li id="fn1"><p>That is,
<code>http://github.com/blend-os/tracks/raw/main</code> + <code>http://github.com/blend-os/tracks/raw/main</code> +
<code>/</code> + <code>default-gnome</code> + <code>/</code> + <code>default-gnome</code> +
<code>.yaml</code><a href="#fnref1" class="footnote-back" <code>.yaml</code>; also, I probably should've just... read the
documentation from the start, instead of figuring this out on my
own and only later checking the docs.<a href="#fnref1"
class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn2"><p>For example, in the provided
<code>blend-os/tracks</code> repo, <code>default-gnome</code>
actually inherits from the <code>gnome</code> track.<a
href="#fnref2" class="footnote-back"
role="doc-backlink">↩︎</a></p></li> role="doc-backlink">↩︎</a></p></li>
<li id="fn2"><p>In the provided <code>blend-os/tracks</code> <li id="fn3"><p>In the meantime while I've been writing this, a
repo, <code>default-gnome</code> actually inherits from the community member has implemented <a
<code>gnome</code> track.<a href="#fnref2" class="footnote-back" href="https://aur.archlinux.org">AUR</a> package caching, which
can definitely cut down on the build time by a lot, depending on
how many packages you're using from the AUR. However, this
hasn't been added to the upstream version of Akshara yet, though
through no fault of the blendOS team; as far as I know, the dev
who implemented it just hasn't sent it over to be added yet.<a
href="#fnref3" class="footnote-back"
role="doc-backlink">↩︎</a></p></li> role="doc-backlink">↩︎</a></p></li>
</ol> </ol>
</aside> </aside>
@ -116,5 +201,6 @@
</body> </body>
<footer> <footer>
<p><a href="https://git.askiiart.net/askiiart/engl-2311-blog">Source code</a>&ensp;|&ensp;<a href="/feed.xml">RSS</a></p> <p><a href="https://git.askiiart.net/askiiart/engl-2311-blog">Source code</a>&ensp;|&ensp;<a href="/feed.xml">RSS</a></p>
<small>Image captions are the same as the alt text; assuming you're sighted, you can most likely ignore them.</small>
</footer> </footer>
</html> </html>

View file

@ -1,20 +1,20 @@
# Checking out blendOS # Checking out blendOS
---
WARNING: This page is a work-in-progress, and is very incomplete. Read at your own risk.
---
blendOS is self-described as "Arch Linux, made declarative, immutable and atomic." And yeah, that's a pretty good description of what it is. But you can never *really* tell what a distro is like without trying it, so... blendOS is self-described as "Arch Linux, made declarative, immutable and atomic." And yeah, that's a pretty good description of what it is. But you can never *really* tell what a distro is like without trying it, so...
## Installation ## Installation
I decided to just run blendOS in a virtual machine; I had a bunch of data I hadn't backed up yet and was actively working on, and didn't feeling like switching yet given I had no experience with blendOS v4 - I've actually tried blendOS v3 before, back when v4 was in alpha, but it had practically zero documentation, not even `man` pages, so I gave up on it very quickly. But with v4, hopefully it's improved since then. I decided to just run blendOS in a virtual machine; I had a bunch of data I hadn't backed up yet and was actively working on, and didn't feeling like switching yet given I had no experience with blendOS v4 - I've actually tried blendOS v3 before, back when v4 was in alpha, but it had practically zero documentation, not even `man` pages, so I gave up on it very quickly. But with v4, hopefully it's improved since then.
Installation itself was simple: it's got a basic installer, which notably allows for manual partitioning, but does *not* allow for selecting which track to use (which we'll get to later), though to be fair, that's *very* simple to change post-installation.
![blendOS live image boot: a basic GNOME desktop with a vertical white window in the center; it has the blendOS logo and a "Start" button, with the text "Welcome to blendOS", "Press Start to start installing blendOS!"](/assets/blendos/1.png)
## First use ## First use
Upon first boot, blendOS drops you into a pretty standard GNOME session, on account of the `/system.yaml` file by default: Upon first boot, blendOS drops you into a pretty standard GNOME session with a graphical setup to add a user account, set timezone, and all that.
Here's the default `/system.yaml` file provided:
```yaml ```yaml
impl: http://github.com/blend-os/tracks/raw/main impl: http://github.com/blend-os/tracks/raw/main
@ -22,9 +22,11 @@ repo: https://pkg-repo.blendos.co
track: default-gnome track: default-gnome
``` ```
At first I wasn't sure what impl is doing, but it seems to be combined with the track to get the URL for the raw `yaml` file[^1]. At first I wasn't sure what impl is doing, but according to the [`system.yaml` docs] seems to be combined with the track to get the URL for the raw `yaml` file.[^1]
This is actually a really interesting bit *which isn't documented*, as it means you can just, say, host your own track(s) for all your computers in a Git repo, and they can each inherit from other configs[^2] or be overridden locally; this actually seems like a very interesting and viable way to centrally manage many computers running Linux, and given I'm constantly switching between several computers; I can just put my config(s) in one repo, and pull from that. This is actually a really interesting bit, as it means you can just, say, host your own track(s) for all your computers in a Git repo, and they can each inherit from other configs[^2] or be overridden locally; this actually seems like a very interesting and viable way to centrally manage many computers running Linux, and given I'm constantly switching between several computers; I can just put my config(s) in one repo, and pull from that.
(details on this at [`system.yaml` docs] -> Creating a track repo/webserver)
## Configuration ## Configuration
@ -57,20 +59,57 @@ commands:
'echo hiiiiiii > /home/user/helloooooo' 'echo hiiiiiii > /home/user/helloooooo'
``` ```
It's quite basic, but blendOS actually works very well for me; I already have a Git repo of [all my configs](https://git.askiiart.net/askiiart/configs), which are intended to be run from a clean installation automatically, so for blendOS I just have to put those scripts into the yaml file and adapt it so the packages are listed in the YAML rather than being installed with `pacman` or `yay`. (from [`system.yaml` docs])
It's quite basic, but blendOS's design actually works very well for me; I already have a Git repo of [all my configs](https://git.askiiart.net/askiiart/configs), which are intended to be run from a clean installation automatically, so for blendOS I just have to put those scripts into the yaml file and adapt it so the packages are listed in the YAML rather than being installed with `pacman`, `paru` or the like (at least, not directly, via `akshara` instead)
## Problems ## Problems
Biggest of all blendOS's problems is how slow it is to rebuild. It doesn't save "layers" of packages like [`rpm-ostree`](https://github.com/coreos/rpm-ostree) (as used by Fedora atomic) *By far*, the biggest of all blendOS's problems is how slow it is to rebuild. It doesn't save "layers" like [`rpm-ostree`][`rpm-ostree` docs] (as used by Fedora atomic); instead, it just completely rebuilds the system every single time. Because of this, it takes a long time to run the updater/rebuilder, even to just install one more package.
Besides that, my only complaints are:
1. The `akshara`'s (the update/rebuild tool) major issue with reinheritance (see [`system.yaml` docs] -> Inheritance).
2. Its community and issue tracking is primarily on Discord, which is then indexed by Answer Overflow so it's searchable with Google and the like; there's no dedicated developer space (only one issue on [their GitLab][blendOS GitLab], where `akshara` is hosted.) However, given you must be pretty competent with Linux to be using blendOS in the first place, and how small the dev team and community is, this isn't much of an issue.
3. There's a lack of documentation for some bits, though the docs are updated and getting new additions constantly.
I've encountered more bugs and missing features since then, but I'll talk about that in my next post, as they'll fit better there.
## Wishlist ## Wishlist
This is some other stuff I want, not necessarily problems, but things I'd like added
- I'd like an equivalent of this at the user level specifying packages, repos, and commands for other (containerized) distros.
- I'd like to be able to automatically install blendOS - to be able to script it rather than going through the GUI. Just a tarball of the installed system would be great.
## Sources ## Sources
- \[1\] [blendOS homepage](https://blendos.co/) Sources are linked as they're used throughout, and also listed separately here.
- \[2\] [blendOS post-install intro](https://blendos.co/install/post-install/intro/)
[blendOS Homepage]: https://blendos.co/
[Introduction to blendOS]: https://blendos.co/install/post-install/intro/
[blendOS reference]: https://blendos.co/reference/
[`system.yaml` docs]: https://blendos.co/reference/configs/system/
[blendOS GitLab]: https://git.blendos.co/blendOS
[`rpm-ostree` docs]: https://coreos.github.io/rpm-ostree/
[blendOS's Git structure]: https://blendos.co/contributing/#git-structure
<!-- Link definition are above, separate (rendered) links below -->
1. [blendOS Homepage]
2. [Introduction to blendOS]
3. [blendOS reference]
4. [`system.yaml` docs]
5. [blendOS GitLab]
6. [`rpm-ostree` docs]
7. [blendOS's Git structure]
Note: As I write this, the docs, particularly the [blendOS reference], are being constantly revised. During the process of writing this, an entire new section has been added, though this post doesn't touch on that and said section is unused here - it'll come into play in the next post.
## Footnotes ## Footnotes
[^1]: That is, `http://github.com/blend-os/tracks/raw/main` + `/` + `default-gnome` + `.yaml` [^1]: That is, `http://github.com/blend-os/tracks/raw/main` + `/` + `default-gnome` + `.yaml`; also, I probably should've just... read the documentation from the start, instead of figuring this out on my own and only later checking the docs.
[^2]: In the provided `blend-os/tracks` repo, `default-gnome` actually inherits from the `gnome` track.
[^2]: For example, in the provided `blend-os/tracks` repo, `default-gnome` actually inherits from the `gnome` track.
<!-- Note if you're viewing the Markdown version: [^1] is for footnotes; that's the formatting used by Pandoc, but VS Code, for example, doesn't support it. -->

View file

@ -5,7 +5,7 @@
<title>eng.askiiart.net</title> <title>eng.askiiart.net</title>
<description>This is the feed for engl.askiiart.net, I guess</description> <description>This is the feed for engl.askiiart.net, I guess</description>
<link>https://askiiart.net</link> <link>https://askiiart.net</link>
<lastBuildDate>Mon, 26 Aug 2024 14:10:10 +0000</lastBuildDate> <lastBuildDate>Mon, 02 Sep 2024 04:10:52 +0000</lastBuildDate>
<item> <item>
<title>Checking out blendOS</title> <title>Checking out blendOS</title>
<link>https://engl.askiiart.net/blog/blendos.html</link> <link>https://engl.askiiart.net/blog/blendos.html</link>

View file

@ -20,5 +20,6 @@
</body> </body>
<footer> <footer>
<p><a href="https://git.askiiart.net/askiiart/engl-2311-blog">Source code</a>&ensp;|&ensp;<a href="/feed.xml">RSS</a></p> <p><a href="https://git.askiiart.net/askiiart/engl-2311-blog">Source code</a>&ensp;|&ensp;<a href="/feed.xml">RSS</a></p>
<small>Image captions are the same as the alt text; assuming you're sighted, you can most likely ignore them.</small>
</footer> </footer>
</html> </html>

View file

@ -9,8 +9,16 @@ filename = sys.argv[1]
with open(filename, 'r+') as f: with open(filename, 'r+') as f:
contents = ''.join(f.readlines()) contents = ''.join(f.readlines())
regexp = re.compile('alt="(.*?)"') regexp = re.compile('alt="(.*?)"')
# set title to same as alt text
for match in regexp.finditer(contents): for match in regexp.finditer(contents):
contents = contents.replace(match.group(0), f'title="{match.group(1)}" {match.group(0)}') contents = contents.replace(
match.group(0), f'title="{match.group(1)}" {match.group(0)}'
)
regexp = re.compile('<figure>.*?(<img.*?/>).*?</figure>', re.DOTALL)
for match in regexp.finditer(contents):
contents = contents.replace(match.group(0), match.group(1))
with open(filename, 'wt') as f: with open(filename, 'wt') as f:
f.write(contents) f.write(contents)

View file

@ -42,6 +42,14 @@ footer {
font: 18px/1.35 'Atkinson Hyperlegible', sans-serif; font: 18px/1.35 'Atkinson Hyperlegible', sans-serif;
} }
figcaption {
font: 14px/1.35 'Atkinson Hyperlegible', sans-serif;
}
small {
font: 14px/1.35 'Atkinson Hyperlegible', sans-serif;
}
a:link, a:link,
a:visited { a:visited {
color: #80c47b; color: #80c47b;
@ -105,4 +113,8 @@ blockquote {
border-left: 3px solid #59997a; border-left: 3px solid #59997a;
padding-left: 1em; padding-left: 1em;
margin-left: 0.5; margin-left: 0.5;
}
img {
max-width: 90vw;
} }

View file

@ -14,5 +14,6 @@
</body> </body>
<footer> <footer>
<p><a href="https://git.askiiart.net/askiiart/engl-2311-blog">Source code</a>&ensp;|&ensp;<a href="/feed.xml">RSS</a></p> <p><a href="https://git.askiiart.net/askiiart/engl-2311-blog">Source code</a>&ensp;|&ensp;<a href="/feed.xml">RSS</a></p>
<small>Image captions are the same as the alt text; assuming you're sighted, you can most likely ignore them.</small>
</footer> </footer>
</html> </html>