<?xml version="1.0"?>
<?xml-stylesheet href="/transform" type="text/xsl"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:bibo="http://purl.org/ontology/bibo/" xmlns:bs="http://purl.org/ontology/bibo/status/" xmlns:ci="https://vocab.methodandstructure.com/content-inventory#" xmlns:dct="http://purl.org/dc/terms/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xhv="http://www.w3.org/1999/xhtml/vocab#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" lang="en" prefix="bibo: http://purl.org/ontology/bibo/ bs: http://purl.org/ontology/bibo/status/ ci: https://vocab.methodandstructure.com/content-inventory# dct: http://purl.org/dc/terms/ foaf: http://xmlns.com/foaf/0.1/ rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns# xhv: http://www.w3.org/1999/xhtml/vocab# xsd: http://www.w3.org/2001/XMLSchema#" vocab="http://www.w3.org/1999/xhtml/vocab#" xml:lang="en">
  <head>
    <title property="dct:title">Website Change Diary</title>
    <base href="https://doriantaylor.com/website-change-diary"/>
    <link href="document-stats#ErcdEBjrLNOqG4Y_9ka8HJ" rev="ci:document"/>
    <link href="elsewhere" rel="alternate bookmark" title="Elsewhere"/>
    <link href="this-site" rel="alternate index" title="This Site"/>
    <link href="http://purl.org/ontology/bibo/status/published" rel="bibo:status"/>
    <link href="" rel="ci:canonical" title="Website Change Diary"/>
    <link href="person/dorian-taylor#me" rel="dct:creator" title="Dorian Taylor"/>
    <link href="person/dorian-taylor" rel="dct:references meta" title="Who I Am"/>
    <link href="//privatealpha.com/ontology/content-inventory/1" rel="dct:references"/>
    <link href="file/brownian-motion;desaturate;scale=500,500" rel="foaf:depiction"/>
    <link about="./" href="3f36c30c-6096-454a-8a22-c062100ae41f" rel="alternate" type="application/atom+xml"/>
    <link about="./" href="f07f5044-01bc-472d-9079-9b07771b731c" rel="alternate" type="application/atom+xml"/>
    <link about="./" href="this-site" rel="alternate"/>
    <link about="./" href="elsewhere" rel="alternate"/>
    <link about="./" href="e341ca62-0387-4cea-b69a-cdabc7656871" rel="alternate" type="application/atom+xml"/>
    <link about="verso/" href="3f36c30c-6096-454a-8a22-c062100ae41f" rel="alternate" type="application/atom+xml"/>
    <link about="verso/" href="this-site" rel="alternate"/>
    <link about="verso/" href="elsewhere" rel="alternate"/>
    <meta content="false" datatype="xsd:boolean" property="ci:indexed"/>
    <meta content="website-change-dairy" datatype="xsd:token" property="ci:slug"/>
    <meta content="Here is where I will be chronicling changes to my website as I make them." name="description" property="dct:abstract"/>
    <meta content="2019-05-08T21:56:27+00:00" datatype="xsd:dateTime" property="dct:created"/>
    <meta content="2019-05-17T05:08:42+00:00" datatype="xsd:dateTime" property="dct:modified"/>
    <meta content="2019-05-19T00:47:14+00:00" datatype="xsd:dateTime" property="dct:modified"/>
    <meta content="2019-06-15T15:36:57+00:00" datatype="xsd:dateTime" property="dct:modified"/>
    <meta content="2019-08-15T21:03:26+00:00" datatype="xsd:dateTime" property="dct:modified"/>
    <meta content="2022-05-31T15:10:50+00:00" datatype="xsd:dateTime" property="dct:modified"/>
    <meta about="person/dorian-taylor#me" content="Dorian Taylor" name="author" property="foaf:name"/>
    <meta content="summary_large_image" name="twitter:card"/>
    <meta content="@doriantaylor" name="twitter:site"/>
    <meta content="Website Change Diary" name="twitter:title"/>
    <meta content="Here is where I will be chronicling changes to my website as I make them." name="twitter:description"/>
    <meta content="https://doriantaylor.com/file/brownian-motion;desaturate;scale=500,500" name="twitter:image"/>
    <object>
      <nav>
        <ul>
          <li>
            <a href="this-site" rev="dct:references" typeof="bibo:Note">
              <span property="dct:title">This Site</span>
            </a>
          </li>
          <li>
            <a href="document-stats#ErcdEBjrLNOqG4Y_9ka8HJ" rev="ci:document" typeof="qb:Observation">
              <span>urn:uuid:adc74406-3acb-434e-9a86-e18ffd91af07</span>
            </a>
          </li>
        </ul>
      </nav>
    </object>
  </head>
  <body about="" id="ESNu1aSs-RmfKb06HTxdMK" typeof="bibo:Article">
    <p>The Web development industry is still awfully cavalier about redesigns. I understand that the redesign is a convenient project format that organizations often specifically request. Redesigns likewise evoke a mystique of glamour and novelty, as well as being full of opportunities to flex new technical muscle. However, as somebody who cares about the integrity of information on the Web, I am routinely disappointed by the kinds of results produced by this framing, and therefore have made it my mission to figure out how to do things differently. Over the years I have called aspects of this initiative by different names, for example:</p>
    <ul>
      <li><a href="dissolving-the-redesign" rel="dct:references" title="Dissolving the Redesign">Dissolving the Redesign</a></li>
      <li><a href="intelligent-heterogeneity" rel="dct:references" title="Intelligent Heterogeneity">Intelligent Heterogeneity</a></li>
      <li><a href="the-hundred-year-infrastructure" rel="dct:references" title="The Hundred-Year Infrastructure">The Hundred-Year Infrastructure</a></li>
    </ul>
    <aside role="note" id="ECmll8kNGzMVhppnWnm9zL">
      <p>To pre-empt any hair-splitting over what I mean by the word <dfn>redesign</dfn>: a project whose paradigm is ultimately one of <em>replacement</em>. Pertaining to websites, this usually entails the wholesale replacement of:</p>
      <ul>
        <li>the technical infrastructure,</li>
        <li>the visual design,</li>
        <li>almost always the navigation and/or taxonomical structure,</li>
        <li>also invariably moves or obliterates a sizable chunk of the content.</li>
      </ul>
      
    </aside>
    <p>My ultimate goal here is to figure out how to change the Web development paradigm from one of <em>replacement</em> to one of <em>repair</em>, and in the process, <a href="lowering-the-risk-of-web-development" rel="dct:references" title="Lowering the Risk of Web Development">devise business engagements with lower risk</a>&#x2014;and thus an <a href="the-roi-of-a-solved-problem" rel="dct:references" title="The ROI of a Solved Problem">opportunity to earn more money</a>&#x2014;while at the same time <a href="the-value-of-tailored-information-infrastructure" rel="dct:references" title="The Value of Tailored Information Infrastructure">delivering higher-quality</a>, <a href="on-the-building-of-software-and-websites" rel="dct:references" title="On the &#x201C;Building&#x201D; of Software and Websites">more durable material results</a> to clients, stakeholders, and users.</p>
    <p>I can think of a lot of reasons why you would want to change a website other than a complete redesign, but two in particular jump out at me:</p>
    <dl>
      <dt>You don't have the resources for a complete overhaul</dt>
      <dd>Website redesigns divert lots of resources, and they do it over a protracted time interval. Maybe you don't have several hundred thousand dollars to pay an agency. Maybe you can't wait for <q>launch</q> to get some new asset into the hands of users&#x2014;or your own. Maybe you just believe that there's no compelling reason to <em>not</em> develop a website incrementally.</dd>
      <dt>You want to preserve your content</dt>
      <dd>Website redesigns are destructive: they trash content, they break links. Maybe you have resources that you don't want to just unceremoniously delete. Or, maybe, you simply want to preserve the goodwill created by the <em>presence</em> of the content: the search ranking, the general fact that there are people out there somewhere, who once upon a time considered your content to be valuable enough to link to.</dd>
    </dl>
    <p>Since nobody is currently lining up to offer their websites as tribute for this excursion, and because I fit both of these criteria, I am using my own website as a proving ground. As such, I thought it would be helpful to start something like a change diary. That's change <em>diary</em>, not change <em>log</em>, because I want to do a little more than say what I changed; I also want to explain and/or discuss it a bit.</p>
    <section id="EGTDyx9et8YbUmncePqOgK">
      <h2>Intervention Zero: <time datetime="2019-05-05">Sunday, May 5</time></h2>
      <p><a href="content-management-meta-system" rel="dct:references" title="Content Management Meta-System">I quietly overwrote every page on my website</a> with the output of something I am calling my <a href="https://github.com/doriantaylor/rb-rdf-sak" rel="dct:references">Swiss Army Knife</a>.</p>
      <aside role="note" id="Ey2dI9h-EQvFDA8o58Bw0L">
        <p>I call it Swiss Army Knife because it yokes together a bunch of disparate operations on static content. You point it at a source folder and a glob of metadata, and for now, it will:</p>
        <ul>
          <li>Rewrite each <abbr>HTML</abbr> file with all the metadata which is currently known about it,</li>
          <li>Generate as many Atom feeds as you have descriptors for,</li>
          <li>Generate three rewrite maps: a proper rewrite from <abbr>URL</abbr> to file mappings, true redirects, and <abbr>URLs</abbr> which are <code>410 Gone</code>.</li>
        </ul>
        <p>As it is ultimately a static website generator, we can consider the <abbr>SAK</abbr> to be something like <a href="https://jekyllrb.com/" rel="dct:references">Jekyll</a>, with Semantic Web characteristics.</p>
      </aside>
      <p>I began by laying the groundwork:</p>
      <ol>
        <li><kbd>ssh</kbd> into the website,</li>
        <li>Use <a href="https://rsync.samba.org/" rel="dct:references"><kbd>rsync</kbd></a> to copy everything that isn't a Web page from the <dfn>document root</dfn> to a new folder,</li>
        <li>Add <a href="https://httpd.apache.org/docs/current/rewrite/rewritemap.html" rel="dct:references"><kbd>RewriteMap</kbd></a> entries to the main server configuration.</li>
      </ol>
      <p>Back at home:</p>
      <ol start="4">
        <li>Use the Swiss Army Knife to generate new documents, feeds, and rewrite maps,</li>
        <li><kbd>rsync</kbd> the results to the new document root on the server,</li>
        <li><kbd>ssh</kbd> into the server and change the configuration to point to the document root,</li>
        <li>Finished!</li>
      </ol>
      <aside role="note" id="EQ2jINm9EoaXNyBHGpTdHL">
        <p>I can delete the old document root when I am satisfied that I won't need to revert back to it ever again.</p>
      </aside>
      <p>The site is superficially identical to the way it was prior to the change, but with the following <em>in</em>visible changes:</p>
      <ul>
        <li>All document files now take a form like <samp>f07f5044-01bc-472d-9079-9b07771b731c.xml</samp>, in the immediate document root,</li>
        <li>Direct <abbr>URL</abbr>-to-file mapping has been eliminated, except for e.g. images,</li>
        <li>All human-readable <abbr>URLs</abbr> are now managed by <samp>RewriteMap</samp>,</li>
        <li>Every page is now crammed full of useful metadata.</li>
      </ul>
    </section>
    <section id="ErDTtD0G7G88GyVYZpxNIK">
      <h2>Intervention One: <time datetime="2019-05-06">Monday, May 6</time></h2>
      <p>I added modification times!</p>
      <p>This is something I had erstwhile deliberately left off, for two reasons:</p>
      <ol>
        <li>Obviously, I would have had to implement <em>some</em> content management infrastructure or other, which would have taken my super-lazy website to super-<em>not</em>-lazy overnight,</li>
        <li>I tend to write about slow-moving topics that stay relevant for a really long time, and I don't like the tendency for people to discount an article just because it isn't brand spanking new.</li>
      </ol>
      <p>Anyway, people complained. They complained and complained, so I added modification times. Owing to the <a href="https://github.com/doriantaylor/rb-rdf-sak" rel="dct:references">Swiss Army Knife</a>, the process&#x2014;which reduced to instructing the template to dig the timestamps out of the embedded metadata&#x2014;took all of ten minutes.</p>
      <p>I will invariably change it later when I have a better idea for how it ought to look, at which point it will take another ten minutes. That's what this exercise is about: making websites so cheap to change, there is no deliberation, you just do it.</p>
    </section>
    <section id="EnCHJZynmcubHRysDAkUiJ">
      <h2>Intervention Two: <time datetime="2019-05-15">Wednesday, May 15</time></h2>
      <p>Today I made some very desperately-needed changes to the visual design:</p>
      <dl>
        <dt>Responsive <abbr>SVG</abbr> wordmark</dt>
        <dd>
          <p>The wordmark changes configuration when its bounding rectangle gets wider than a certain aspect ratio. As one might expect, a media query swaps one viewport out for another, enabling the path data to be reused. This is in keeping with a conceptualization of Web resources, such as vector graphics, as rudimentary <em>programs</em> that can respond to their surroundings, rather than mere inert files.</p>
          <p>It is worth noting that I had an <abbr>SVG</abbr> wordmark in the very first <time>2008</time> design, which <span class="parenthesis" title="even PNG wasn't reliable at the time">fell back to <abbr>GIF</abbr> for non-supporting browsers</span>. Even the few that supported <abbr>SVG</abbr> didn't do so consistently. I remember being made fun of at the time for the effort. It was many years before <abbr>SVG</abbr> became a viable tool in the kit.</p>
        </dd>
        <dt>Migrate <abbr>CSS</abbr> to <a href="https://sass-lang.com/" rel="dct:references">Sass</a></dt>
        <dd>
          <p>I have nothing more to add other than <strong>finally</strong>.</p>
          <p>Okay maybe I have a little bit more to add: my personal style when it comes to <abbr>CSS</abbr> is to avoid <code>class</code> selectors where I can, because they proliferate like crazy, and it is <a href="design-system-as-style-manual-with-web-characteristics" rel="dct:references" title="Design System as Style Manual With Web Characteristics">no small effort</a> to tame them. Second, class names often reduplicate semantics that could be more usefully represented as standard metadata&#x2014;<a href="https://www.w3.org/TR/html5/dom.html#wai-aria" rel="dct:references">particularly <em>accessibility</em> metadata</a>&#x2014;as well as general-purpose microdata or <abbr>RDFa</abbr>. Class names are also made redundant by node selectors when the topology of the document can be expected to remain relatively stable. As such, I only use <abbr>CSS</abbr> classes when I absolutely cannot hook into the content any other way.</p>
          <p>Anyway, if you're gonna go that route, holy cow will you ever need help with the heavy lifting, and that's what <a href="https://sass-lang.com/" rel="dct:references">Sass</a> provides.</p>
        </dd>
        <dt>Rudimentary responsive layout</dt>
        <dd>For screens with more real estate, I ended up moving the ancillary content from the bottom of the screen to a fixed position on the left, as I anticipate there will soon be more of it. For smaller screens, the layout is roughly the same as it was, with the exception of the awkward <code>float</code> layout swapped out for a more manageable <code>flex</code>.</dd>
      </dl>
      <p>These changes are perhaps not worth remarking on in their own right, but what <em>is</em> remarkable is the fact that I completed them in just an few hours in the afternoon and evening, and I did it without destroying anything. I have made several attempts over many years to redo the visual design on this site, each of which I had to abandon because it required too much contiguous effort. The only way it shipped was all or nothing: I couldn't do what I did here, which was to spend a few hours making some improvements that didn't leave the rest of the site any worse off. <em>That</em> is really the goal here: to create an environment where I can tinker <em>productively</em> whenever I have the time.</p>
      <p>There is no reason why an <em>organization</em> couldn't adopt this strategy too.</p>
    </section>
    <section id="EaZSWWW2xm6cLhKrMEfE0I">
      <h2><time datetime="2019-05-18">Saturday, May 18</time>: Dog Food</h2>
      <p>I got my visual design template working with <a href="https://github.com/doriantaylor/rdfa-xslt" rel="dct:references">the <abbr>RDFa</abbr></a> and <a href="https://github.com/doriantaylor/xslt-transclusion" rel="dct:references">transclusion <abbr>XSLT</abbr> libraries</a> I had actually written for this specific purpose. In fact, I had done <abbr>RDFa</abbr> already the last time around, and this sortie was to get the transclusion stuff in there. I am finally now displaying my most current technique on my own website.</p>
      <aside role="note" id="ElJ4vUiBaS0v4Flx-UuaoI">
        <p>I should add that WebKit has no <abbr>XSLT</abbr> debugging to speak of. Even Internet Explorer will tell you, albeit cryptically, what is wrong with your code. Chrome and Safari leave you to guess at a blank screen. Only Firefox has anything resembling diagnostics for <abbr>XSLT</abbr>, with less-helpful messages displayed on screen, and fine-grained error messages, including your own <samp>&lt;xsl:message&gt;</samp> output, <a href="https://developer.mozilla.org/en-US/docs/Tools/Browser_Console" rel="dct:references">in the <span class="parenthesis" title="NOT the inspector console">main browser console</span>.</a></p>
      </aside>
      <p>To reiterate, <a href="the-hundred-year-infrastructure" rel="dct:references" title="The Hundred-Year Infrastructure">the purpose of this excursion</a> is to come up with a <em>durable</em>, <em>declarative</em>, <em>standards-based</em> way to <a href="intelligent-heterogeneity" rel="dct:references" title="Intelligent Heterogeneity">separate presentation from content</a>. Granted, the <abbr>RDFa</abbr> querying stuff is <q>new</q>, where <q>new</q> is defined as <q>didn't show up until a full decade after <abbr>XSLT</abbr> 1.0</q>. The transclusion library, on the other hand, would have worked just fine back when we were all still worrying about <abbr>Y2K</abbr>. Think about that: I'm using technique that I learned when the average Y Combinator cohort was in kindergarten, and I don't see why it wouldn't continue to work when they're as used up and salty as I am now.</p>
    </section>
    <section id="EZX2hxicN8y_Dt-4G6h_aJ">
      <h2><time datetime="2019-07-07">Sunday, July 7</time>: Repair Job &amp; Backlinks</h2>
      <p>Most of the content on this site is completely static, or put more accurately, deterministic transformations of static files. Only a handful of resources involve more computation than that. One such is the <a href="book/" rel="dct:references" title="Books Cited">index of cited books</a>. I had generated this index initially by scraping my content for Amazon links, then collating by <abbr title="International Standard Book Number">ISBN</abbr> and collecting the metadata, then flipping the whole structure around. Since I started using <a href="https://github.com/doriantaylor/rb-rdf-sak" rel="dct:references">the Swiss Army Knife</a> to manage this website, <a href="https://twitter.com/prathyvsh/status/1147171558399459328" rel="dct:references">it had apparently been been buried</a> by the system, since the book index was not under its management. I remedied this situation by reimplementing the one-off script I had previously used to generate the index as a lobe of the <abbr title="Swiss Army Knife">SAK</abbr>.</p>
      <p>Because of the infrastructure I had to write in order to get the book index generated, I had all the precursor material I needed to do something I had been planning to do for a while, which is to add reverse links to the rest of the website. Now every page that isn't a complete orphan will have a <q>What Links Here</q> inset that, well, does what it says on the tin.</p>
      <p>Note that this development has made real estate scarce in the marginalia, so I will inevitably have to reconsider how to lay it out.</p>
    </section>
    <section id="E6EYoXtu8mfQvj5NnxJhoL">
      <h2><time datetime="2019-07-28">Sunday, July 28</time>: Audiences, Sitemaps, and Google</h2>
      <p>One of the goals of this website rehabilitation project is to further refine the process of performing <dfn>content inventories</dfn> and subsequent <dfn title="content audit">content audits</dfn>. Indeed, a live inventory forms the backbone of the breadboard <a href="content-management-meta-system" rel="dct:references" title="Content Management Meta-System">content management meta-system</a> I am <a href="https://github.com/doriantaylor/rb-rdf-sak" rel="dct:references">currently designing</a>. The inventory itself is glued together from a number of a different data vocabularies <a href="https://vocab.methodandstructure.com/content-inventory#">including one I designed</a> with a number of useful properties to facilitate content audits.</p>
      <p>An important aspect of a content audit is the reconciliaton of a <span class="parenthesis" title="or fragment thereof">document</span> with its audience. I have been brewing a solution to this problem for some time: Any information resource, to the extent that it contains any language at all, is bound to mention certain terms. These terms identify concepts, and the concepts can be put into relation to one another. Furthermore, even if a concept is <em>not</em> explicitly invoked within the resource, it may still be implied. It is a fairly straightforward process, then, to relate documents to concepts in this way, provided we <a href="https://www.w3.org/TR/skos-reference/" rel="dct:references">have a representation of the concept scheme</a>.</p>
      <p>Obtaining the terms <em>themselves</em>, is another story. My current strategy is just to throw the inventory into a big spreadsheet and read through them, however with over <var>200</var> articles that stretch up and beyond <var>9,000</var> words, I am looking for a more efficient method.</p>
    </section>
  </body>
</html>
